Come trovare le promesse non gestite in Node.js UnhandledPromiseRejectionWarning?

Node.js dalla versione 7 ha async / await zucchero sintattico per la gestione delle promesse e ora nel mio codice il seguente avviso arriva abbastanza spesso:

(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. 

Sfortunatamente non c’è alcun riferimento alla linea in cui manca la presa. C’è un modo per trovarlo senza controllare ogni try / catch block?

ascolta un evento di unhandledRejection di processo.

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

Il modo corretto per mostrare uno stacktrace completo per i respingimenti Promessa ES6 non gestiti, è eseguire Node.js con il --trace-warnings . Questo mostrerà lo stacktrace completo per ogni avviso, senza dover intercettare il rifiuto dal proprio codice. Per esempio:

 nodo --trace-warnings app.js

Se vuoi effettivamente gestire i rifiuti non gestiti (ad esempio, registrandoli), allora potresti voler usare il mio modulo di rifiuto non gestito , che cattura tutti i respingimenti non gestiti per ogni importante implementazione di Promises che lo supporta, con un singolo gestore di eventi.

Tale modulo supporta Bluebird, ES6 Promises, Q, WhenJS, es6-promise , then/promise e tutto ciò che è conforms a qualsiasi delle specifiche di rifiuto non gestite (dettagli completi nella documentazione).