Ich benutze Cujos großartige Wenn Bibliothek eine Promises / A + Implementierung für mein Node Projekt zur Verfügung stellt, obwohl diese Frage nicht knotenspezifisch ist.
Im Allgemeinen, wenn es großartig ist: es lässt mich mehr wartbaren, lesbaren Code schreiben.
Wenn jedoch meine Callbacks unerwartet fehlschlagen (Zugriff auf eine Eigenschaft einer Null-Variablen usw.), werden die Ausnahmen effektiv von When geschluckt, wie es scheint spezifiziert durch die Promises / A + Spezifikation. Leider bedeutet dies, dass keine Rückmeldung über den Fehler erhält (abgesehen davon, dass der Callback zu diesem Zeitpunkt nicht mehr ausgeführt wird). Kein Fehlertyp oder Nachricht, keine Zeilennummer.
Zur Veranschaulichung:
%Vor%Ich kann mir eine Handvoll (inakzeptabler) Wege vorstellen, dies anzugehen:
then
Aufruf (um den Grund / die Ausnahme an die Konsole auszugeben) console.log('I got here 123')
Mache ich es einfach falsch? Sicherlich bin ich nicht allein darin, die Debuggabilität von auf Versprechen basierenden Codes schlecht zu finden. Gibt es eine offensichtliche Lösung, die ich vermisse?
Update Sep 2016: NodeJS 6.6.0+ und 7.0+ warnen automatisch bei unbehandelten Ablehnungen. Führen Sie den Knoten mit --trace-warnings
aus, um sinnvolle Stack-Traces zu erhalten. Immer noch nicht so gut wie das, was dir der Bluebird bietet, aber viel besser als vorher.
Ok, also fasse die Informationen aus den Kommentaren zusammen und füge etwas hinzu.
.done
-Methode einfügen, die explizit angibt, dass die Kette beendet wurde. Dies führt dazu, dass nicht erfasste Ablehnungen ausgelöst werden. Bibliotheken wie When und Q lösen das Problem auf diese Weise. Zum Beispiel, wenn Ihr .then
nach .query
ein .done
wäre, würden Sie einen langen Stack-Trace bekommen. Als solche:
%Vor%Mit bluebird
%Vor%Hier erfasse ich, wenn ein Promise auf Knoten abgelehnt, aber nicht abgefangen wurde:
%Vor% Zusätzlich können Sie diesen Affen-Wrapper verwenden, um lange Stack-Traces für Nodes ES6 Promises bereitzustellen . Es erzeugt eine ähnliche Ausgabe wie Q longStackSupport
. Ich würde es aufgrund von Leistungsbedenken nicht zur Verwendung außerhalb des Entwicklungscodes empfehlen. (Es funktioniert für mich in Node v4.4.1. Ich habe es noch nicht in Chrome oder Firefox getestet.)
Tags und Links javascript debugging node.js promise