Estoy tratando de encontrar la fuente de un rechazo no controlado de una Promesa en Node.js
Intenté actualizar a Nodo versión 12, usando la --async-stack-traces
opción, y escuchándolos usando:
process.on("unhandledRejection",( reason, promise ) => {
console.log(reason);
console.log(promise);
});
¡Pero todavía no veo ningún rastro útil de la pila para ayudarme a encontrar al culpable!
UnhandledPromiseRejectionWarning: TypeError: Chaining cycle detected for promise #<Promise>
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:89675) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 11)
Ejecutando Nodo v10.10.0
javascript
node.js
promise
v8
d -_- b
fuente
fuente
const cyclic = Promise.resolve().then(()=>cyclic);
, así que no busque un rechazo de promesa no controlado, este está en el código interno del nodo.npm i bluebird
y agregarconst Promise = require('bluebird')
al código puede darle un mensaje de error más detallado--trace-warnings
rechazos no controlados acompañados de advertencias que puede rastrearRespuestas:
Si pierde un útil seguimiento de pila, puede hacer que el nodo cree uno nuevo volviendo a lanzar su error en su controlador de esta manera:
De esta manera, deberías poder localizar al culpable.
fuente
Gracias por todas las sugerencias. Lo intenté una vez más actualizando al último nodo
12.14.1
y finalmente pude conseguir que mostrara el seguimiento de la pila:Solía
node --async-stack-traces myScript.js
en conjunción con:Y rastreó el error.
fuente
Para encontrar un buen seguimiento de pila para este código
const cyclic = Promise.resolve().then(() => cyclic);
, pongo este código en el archivoprromise_cycle.js
y lo ejecuto con el inspector para depurarlo.Lo depuro en Chrome DevTools con la marca
Pause on caught exceptions
habilitada, y luego puedo ver todo el seguimiento de la pila con mi archivofuente