Estou tentando encontrar a fonte de uma rejeição não tratada de uma promessa no Node.js
Tentei atualizar para o Node versão 12, usando a --async-stack-traces
opção e ouvindo-os usando:
process.on("unhandledRejection",( reason, promise ) => {
console.log(reason);
console.log(promise);
});
Mas ainda não vejo nenhum rastreamento útil da pilha para me ajudar a encontrar o culpado!
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)
Executando o Nó v10.10.0
javascript
node.js
promise
v8
d -_- b
fonte
fonte
const cyclic = Promise.resolve().then(()=>cyclic);
, portanto, não procure por uma rejeição de promessa não tratada, essa é no código interno do nó.npm i bluebird
e adicionarconst Promise = require('bluebird')
ao código pode fornecer uma mensagem de erro mais detalhada--trace-warnings
, rejeições não tratadas são acompanhadas de avisos que você pode rastrearRespostas:
Se você perder um rastreamento de pilha útil, poderá fazer o nó criar um novo, lançando novamente seu erro no manipulador da seguinte maneira:
Dessa forma, você deve ser capaz de rastrear o culpado.
fonte
Obrigado por todas as sugestões. Tentei mais uma vez atualizando para o nó mais recente
12.14.1
e finalmente consegui mostrar o rastreamento da pilha:Eu usei
node --async-stack-traces myScript.js
em conjunto com:E localizou o erro.
fonte
Para encontrar um bom rastreamento de pilha para esse código
const cyclic = Promise.resolve().then(() => cyclic);
, coloquei esse código no arquivoprromise_cycle.js
e executei com o inspector para depurá-lo.Eu depuro no Chrome DevTools com sinalizador
Pause on caught exceptions
ativado e, em seguida, consigo ver todo o rastreamento da pilha com o meu arquivofonte