233 votes

Comment trouver quelles promesses ne sont pas gérées dans Node.js UnhandledPromiseRejectionWarning?

Node.js de la version 7 a un sucre syntaxique async / wait pour la gestion des promesses et maintenant dans mon code, l'avertissement suivant apparaît assez souvent:

 (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.
 

Malheureusement, il n'y a aucune référence à la ligne où la capture est manquante. Est-il possible de le trouver sans vérifier tous les blocs try / catch?

371voto

cuixiping Points 644

écoutez unhandledRejection événement du processus.

 process.on('unhandledRejection', (reason, p) => {
  console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
  // application specific logging, throwing an error, or other logic here
});
 

87voto

Sven Slootweg Points 357

Le corriger de façon à afficher en plein stacktrace pour non gérée ES6 Promesse d'un rejet, consiste à exécuter Node.js avec l' --trace-warnings drapeau. Cela permettra de montrer toute la stacktrace pour chaque avertissement, sans avoir à intercepter le rejet de votre propre code. Par exemple:

nœud --trace-avertissements app.js

S'assurer que l' trace-warnings drapeau vient avant le nom de votre .js le fichier! Sinon, le drapeau sera interprété comme un argument de votre script, et il sera ignoré par Node.js lui-même.

Si vous souhaitez gérer non gérée rejets (par exemple. en vous connectant entre eux), alors vous pourriez vouloir utiliser mon unhandled-rejection module à la place, qui surprend les non gérée rejets de toutes les grandes Promesses de la mise en œuvre prend en charge, avec un seul gestionnaire d'événements.

Ce module prend en charge Bluebird, ES6 Promesses, Q, WhenJS, es6-promise, then/promise, et tout ce qui est conforme à l'une quelconque des non gérée rejet cahier des charges (plus de détails dans la documentation).

18voto

joshuakcockrell Points 964

Journalisation avec trace de pile

Si vous recherchez plus d'un message d'erreur utile. Essayez d'ajouter ceci à votre fichier de noeud. Il devrait afficher la trace complète de la pile où votre crash se produit.

 process.on('unhandledRejection', (error, p) => {
  console.log('=== UNHANDLED REJECTION ===');
  console.dir(error.stack);
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X