O Node.js da versão 7 possui açúcar sintático assíncrono / aguardado para lidar com promessas e agora no meu código o seguinte aviso aparece com bastante frequência:
(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.
Infelizmente, não há referência à linha em que a captura está ausente. Existe alguma maneira de encontrá-lo sem verificar cada bloco try / catch?
node.js
promise
async-await
warnings
unhandled-exception
user1658162
fonte
fonte
unhandledRejection
evento do Node ajude? Veja os documentos . Seu retorno de chamada obtém oError
objeto e o realPromise
, e acredito que oError
objeto possa conter um rastreamento de pilha.Can't set headers after they are sent.
você deve dar uma pista de onde isso pode estar acontecendo no seu código (ou seja, em algum lugar em que você esteja definindo cabeçalhos após o envio dos cabeçalhos - provavelmente por causa de uma falha na compreensão do código assíncrono , mas isso é um palpite)Respostas:
ouvir
unhandledRejection
evento do processo.fonte
error.stack
(ou no exemplo acimareason.stack
) fornece o rastreamento completo da pilha do erro.process.on
em vez deserver.on
, como em tantos outros exemplos que eu encontreiapp.js
arquivo de nó e, infelizmente, nada é registrado. Nodev10.13.0
.A maneira correta de mostrar um rastreamento de pilha completo para rejeições não tratadas do ES6 Promise, é executar o Node.js com o
--trace-warnings
sinalizador. Isso mostrará o rastreamento de pilha completo para cada aviso, sem a necessidade de interceptar a rejeição de dentro do seu próprio código. Por exemplo:Verifique se o
trace-warnings
sinalizador vem antes do nome do seu.js
arquivo! Caso contrário, o sinalizador será interpretado como um argumento para o seu script e será ignorado pelo próprio Node.js.Se você realmente deseja lidar com rejeições não tratadas (por exemplo, registrando-as), pode usar o meu
unhandled-rejection
módulo, que captura todas as rejeições não tratadas para todas as principais implementações do Promises que as suportam, com um único manipulador de eventos.Esse módulo suportes Bluebird, promessas ES6, Q, WhenJS,
es6-promise
,then/promise
, e tudo o que está em conformidade com qualquer uma das especificações de rejeição não tratadas (detalhes completos na documentação).fonte
package.json
iniciar o script e, infelizmente, nada foi registrado. Nodev10.13.0
.Registrando com Rastreio de Pilha
Se você estiver procurando por mais de uma mensagem de erro útil. Tente adicionar isso ao seu arquivo de nó. Ele deve exibir o rastreamento completo da pilha onde a falha está ocorrendo.
fonte