¿Cómo encontrar qué promesas no se han manejado en Node.js UnhandledPromiseRejectionWarning?

Node.js de la versión 7 tiene azúcar sintáctica asincrónica / espera para el manejo de promesas y ahora en mi código aparece la siguiente advertencia con bastante frecuencia:

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

Lamentablemente, no hay referencia a la línea donde falta la captura. ¿Hay alguna forma de encontrarlo sin verificar cada bloque de prueba / captura?

escucha un evento de unhandledRejection procesado del proceso.

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

La forma correcta de mostrar una stack completa para los rechazos de ES6 Promise no administrados es ejecutar Node.js con el --trace-warnings . Esto mostrará la stack completa para cada advertencia, sin tener que interceptar el rechazo desde su propio código. Por ejemplo:

 nodo --trace-warnings app.js

Si quieres manejar rechazos no manejados (por ejemplo, registrándolos), entonces quizás unhandled-rejection usar mi módulo de unhandled-rejection , que captura todos los rechazos no manejados para cada implementación importante de Promises que lo soporte, con un único controlador de eventos.

Ese módulo es compatible con Bluebird, ES6 Promises, Q, WhenJS, es6-promise , then/promise y cualquier cosa que cumpla con cualquiera de las especificaciones de rechazo no controladas (detalles completos en la documentación).