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:
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.
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%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%Tags und Links javascript promise q bluebird