J'essaie de trouver la source d'un rejet non géré d'une promesse dans Node.js
J'ai essayé de mettre à niveau vers Node version 12, en utilisant l' --async-stack-traces
option, et en les écoutant en utilisant:
process.on("unhandledRejection",( reason, promise ) => {
console.log(reason);
console.log(promise);
});
Mais je ne vois toujours aucune trace de pile utile pour m'aider à trouver le coupable!
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)
Exécution de Node v10.10.0
javascript
node.js
promise
v8
d -_- b
la source
la source
const cyclic = Promise.resolve().then(()=>cyclic);
, alors ne recherchez pas un rejet de promesse non géré, celui-ci est dans le code interne du nœud.npm i bluebird
et l'ajoutconst Promise = require('bluebird')
au code peuvent vous donner un message d'erreur plus détaillé--trace-warnings
, les rejets non gérés sont accompagnés d'avertissements que vous pouvez suivreRéponses:
Si vous manquez une trace de pile utile, vous pouvez faire en sorte que le nœud en crée une nouvelle en renvoyant votre erreur dans votre gestionnaire comme ceci:
De cette façon, vous devriez être en mesure de retrouver le coupable.
la source
merci pour toutes les suggestions. J'ai essayé une fois de plus en effectuant une mise à niveau vers le dernier nœud
12.14.1
et j'ai finalement réussi à obtenir la trace de la pile:J'ai utilisé
node --async-stack-traces myScript.js
en conjonction avec:Et il a retrouvé l'erreur.
la source
Pour trouver une bonne trace de pile pour ce code,
const cyclic = Promise.resolve().then(() => cyclic);
j'ai mis ce code dans le fichierprromise_cycle.js
et exécuté avec l'inspecteur pour le déboguer.Je le débogue sur Chrome DevTools avec le drapeau
Pause on caught exceptions
activé, puis je peux voir toute la trace de la pile avec mon fichier dessusla source