2017-02-02 1 views
3

Ich vor kurzem fand mich in einer Situation sehr schwierig zu debuggen. Stellen Sie sich folgende sehr einfache Situation:NodeJS: Auto-Catch-Fehler in Promise und Anruf ablehnen

function somePromise() { 
    return new Promise((resolve, reject) => { 
     SomeModule.someMethod(); 
     AnotherModule.somePromise().then(resolve).catch(reject); 
    }); 
} 

Resolve nie genannt wurde, aber ich habe keinen Fehler in der Konsole - das war schwer zu debuggen!
Stellt sich heraus, dass ich vergessen habe, SomeModule zu verlangen. Nach der Anforderung funktionierte der Code wie erwartet.

Gibt es eine Möglichkeit, jedes Promise in meinem Code mit einem Fehlerhandler automatisch zu versuchen/abzufangen? Ich möchte den Körper meiner Promises nicht mit einem Try/Catch-Block umgeben, um solche Fehler in Zukunft leichter zu finden.

Vielen Dank im Voraus für Meinungen!

Antwort

3

Gibt es eine Möglichkeit, jedes Promise in meinem Code mit einem Fehlerhandler automatisch zu versuchen/abzufangen?

Dies wird implizit bereits durch den Promise Konstruktor getan. Wenn der Callback synchron eine Ausnahme auslöst, wird das Versprechen abgelehnt.

Allerdings sollten Sie die Promise constructor antipattern vermeiden! Verwenden

function somePromise() { 
    SomeModule.someMethod(); 
    return AnotherModule.somePromise(); 
} 
+0

Dies war nur zur Vereinfachung, ich mache etwas mehr Verarbeitung mit den Ergebnissen des Versprechens, das die "antipattern" rechtfertigt. – CrushedPixel

+0

Nein, es gibt keine Rechtfertigung für das Antipattern. Machen Sie einfach '.then (processing)', wobei 'processing' eine Funktion ist, die die Versprechensergebnisse übernimmt und einen neuen Rückgabewert berechnet. Sehr wahrscheinlich Fehler in der Verarbeitung waren der eigentliche Grund, warum Sie keine Fehlermeldungen erhalten haben. – Bergi

+0

Sie waren nicht, das Problem war in der Fangmethode der Methode, die meine eigene Versprechungsmethode behandelt. Aber danke für deine Meinung. – CrushedPixel

Verwandte Themen