Wie finden Sie, welche Versprechen in Node.js UnhandledPromiseRejectionWarning nicht behandelt werden?

Node.js von Version 7 hat async / erwarten syntaktischen Zucker für die Handhabung Versprechen und jetzt in meinem Code die folgende Warnung kommt oft:

(node:11057) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: Error: Can't set headers after they are sent. (node:11057) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 

Leider gibt es keinen Hinweis auf die Zeile, in der der Fang fehlt. Gibt es eine Möglichkeit, es zu finden, ohne jeden try / catch-Block zu überprüfen?

listen Sie unhandledRejection Ereignis des processes auf.

 process.on('unhandledRejection', (reason, p) => { console.log('Unhandled Rejection at: Promise', p, 'reason:', reason); // application specific logging, throwing an error, or other logic here }); 

Die korrekte Methode zum Anzeigen eines vollständigen Stacktrace für nicht behandelte ES6-Promise-Ablehnungen besteht darin, Node.js mit dem --trace-warnings . Dadurch wird für jede Warnung der vollständige Stacktrace angezeigt, ohne dass die Zurückweisung in Ihrem eigenen Code abgefangen werden muss. Beispielsweise:

 Knoten --trace-warnings app.js

Wenn Sie unbehandelte Ablehnungen tatsächlich behandeln möchten (z. B. indem Sie sie protokollieren), können Sie stattdessen mein unhandled-rejection verwenden, das alle nicht behandelten Ablehnungen für jede wichtige Promises-Implementierung, die es unterstützt, mit einem einzigen Ereignishandler abfängt.

Dieses Modul unterstützt Bluebird, ES6 Promises, Q, WhenJS, es6-promise , then/promise und alles, was einer der unbehandelten Ablehnungsspezifikationen entspricht (vollständige Details in der Dokumentation).