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
unhandledRejection
te ayude registrarte en el evento de Node ? Ver los documentos . Su devolución de llamada obtiene elError
objeto y el realPromise
, y creo que elError
objeto 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
unhandledRejection
evento de proceso.fuente
error.stack
(o en el ejemplo anteriorreason.stack
) le proporciona el seguimiento completo de la pila del error.process.on
lugar deserver.on
gustar en tantos otros ejemplos que he encontradoapp.js
archivo 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-warnings
indicador. 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-warnings
bandera aparezca antes del nombre de su.js
archivo! 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-rejection
mó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.json
iniciar 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