una termine que promises promesas programacion funcion esperar ejecucion controlar await async asincronia asincrona node.js promise async-await warnings unhandled-exception

termine - ¿Cómo encontrar qué promesas no se manejan en Node.js UnhandledPromiseRejectionWarning?



promesas typescript (3)

Node.js de la versión 7 tiene azúcar sintáctico asíncrono / en espera para manejar las 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.

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


La forma correcta de mostrar un seguimiento completo de la pila para los rechazos de Promesas ES6 no controladas es ejecutar Node.js con el --trace-warnings . Esto mostrará el seguimiento completo de la pila para cada advertencia, sin tener que interceptar el rechazo desde su propio código. Por ejemplo:

node --trace-warnings app.js

¡Asegúrese de que el indicador de trace-warnings antes del nombre de su archivo .js ! De lo contrario, el indicador se interpretará como un argumento para su secuencia de comandos, y el propio Node.js lo ignorará.

Si realmente desea manejar los rechazos no controlados (por ejemplo, registrándolos), puede utilizar mi módulo de unhandled-rejection , que captura todos los rechazos no controlados para cada implementación de Promesas importante que lo admita, con un solo controlador de eventos.

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


Registro con seguimiento de pila

Si está buscando más de un mensaje de error útil. Intente agregar esto a su archivo de nodo. Debería mostrar el seguimiento de la pila completa donde está ocurriendo su bloqueo.

process.on(''unhandledRejection'', (error, p) => { console.log(''=== UNHANDLED REJECTION ===''); console.dir(error.stack); });


escuchar evento de docs 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 });