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?
node.js
promise
async-await
warnings
unhandled-exception
usuario1658162
fuente
fuente

unhandledRejectionte ayude registrarte en el evento de Node ? Ver los documentos . Su devolución de llamada obtiene elErrorobjeto y el realPromise, y creo que elErrorobjeto podría contener un seguimiento de la pila.Can't set headers after they are sent.debería darle una pista de dónde podría estar sucediendo en su código (es decir, en algún lugar en el que está configurando encabezados después de que los encabezados ya se hayan enviado, presumiblemente debido a una falla en la comprensión del código asincrónico , pero eso es una suposición)Respuestas:
escuchar
unhandledRejectionevento de proceso.fuente
error.stack(o en el ejemplo anteriorreason.stack) le proporciona el seguimiento completo de la pila del error.process.onlugar deserver.ongustar en tantos otros ejemplos que he encontradoapp.jsarchivo de nodo y desafortunadamente no se registra nada. Nodov10.13.0.La forma correcta de mostrar un seguimiento completo de la pila para los rechazos no prometidos de ES6 Promise es ejecutar Node.js con el
--trace-warningsindicador. Esto mostrará el seguimiento completo de la pila para cada advertencia, sin tener que interceptar el rechazo desde su propio código. Por ejemplo:¡Asegúrese de que la
trace-warningsbandera aparezca antes del nombre de su.jsarchivo! 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), es posible que desee utilizar mi
unhandled-rejectionmódulo en su lugar, que captura todos los rechazos no controlados para cada implementación importante de Promises que lo admita, con un solo controlador de eventos.Que soporta los módulos Bluebird, promesas ES6, Q, WhenJS,
es6-promise,then/promise, y cualquier cosa que se ajusta a ninguna de las especificaciones de rechazo no controladas (detalles en la documentación).fuente
package.jsoniniciar el script y desafortunadamente no se registró nada. Nodov10.13.0.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.
fuente