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-tracesopció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 bluebirdy agregarconst Promise = require('bluebird')al código puede darle un mensaje de error más detallado--trace-warningsrechazos 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.1y finalmente pude conseguir que mostrara el seguimiento de la pila:Solía
node --async-stack-traces myScript.jsen 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.jsy lo ejecuto con el inspector para depurarlo.Lo depuro en Chrome DevTools con la marca
Pause on caught exceptionshabilitada, y luego puedo ver todo el seguimiento de la pila con mi archivofuente