Promises und generische .catch () Anweisungen

10

Ich schreibe eine API für mein System, die ein XHR an den Server sendet und ein Versprechen zurückgibt, das vom Aufrufer behandelt werden sollte - soweit so gut.

Für jeden API Aufruf muss ich einen .then und .catch Aufrufe verwenden, aber normalerweise (wie 75% der Zeit) verweist .catch auf die gleiche Funktionalität, die einfach mit console.error ausgibt.

Meine Frage ist - Gibt es eine Möglichkeit, eine Standard-Fanganweisung für jedes Versprechen, das ich erstelle, anzuhängen? (also an die Konsole) und für jedes Versprechen, das ich möchte weiter die Ablehnung behandeln, würde ich einen weiteren .catch -Anruf hinzufügen (oder sogar überschreiben)?

Vereinfachtes Beispiel, in dem jeder Anruf seine eigene .catch hat: Ссылка

Nicht funktionierende Version, die versucht, das gewünschte Verhalten zu implementieren: Ссылка

Im zweiten Beispiel gebe ich, anstatt nur deferred.promise zurückzugeben, ein Versprechen mit einem angehängten catch() -Handler zurück:

%Vor%

In diesem Fall werden die Funktionen then catch und then aufgerufen.

Ich stelle fest, dass das Q das getUnhandledReasons() -Funktions- und onerror -Ereignis freigibt, aber ich möchte nicht unbedingt .done() für jede Zusage verwenden oder irgendeine Art von Timer / Intervall erstellen, um die Liste der nicht behandelten zu behandeln Zurückweisungen.

Andere Bibliotheken wie bluebird machen onPossiblyUnhandledRejection Events verfügbar, was ich zugeben muss, ist eine etwas bessere Lösung, aber immer noch nicht ganz das, wonach ich suche.

    
Gilad Artzi 11.07.2015, 07:33
quelle

3 Antworten

1

Ich denke, alles was Sie tun möchten, ist die Exception erneut auszulösen, nachdem Sie es eingeloggt haben, damit andere Handler es richtig behandeln:

%Vor%     
Benjamin Gruenbaum 12.07.2015 08:53
quelle
1

Q Verwenden Sie den NodeJS-Prozess, um die unbehandelte Ablehnung zu erhöhen. Wenn Sie NodeJS nicht verwenden, können Sie diese Problemumgehung verwenden:

%Vor%     
Alejandro Tamayo 30.09.2015 11:24
quelle
0

Mit bluebird Promises können Sie

anrufen %Vor%

Mit iojs haben Sie den process.on('unhandledRejection') -Handler wie angegeben hier . (Lesen Sie auch das und dies

Soweit ich weiß, bieten weder einheimische Promises anderswo noch Q Promises diese Funktionalität.

    
Madara Uchiha 11.07.2015 12:29
quelle

Tags und Links