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 chaque bloc try/catch?
listen 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
});
La manière correcte d'afficher un tracé de pile complet pour les rejets de promesse ES6 non gérées, consiste à exécuter Node.js avec le drapeau _--trace-warnings
_. Cela montrera le stacktrace complet pour chaque avertissement, sans avoir à intercepter le rejet de votre propre code. Par exemple:
noeud --trace-warnings app.js
Assurez-vous que l'indicateur _trace-warnings
_ est précédé avant du nom de votre fichier _.js
_! Sinon, le drapeau sera interprété comme un argument de votre script et sera ignoré par Node.js lui-même.
Si vous voulez réellement gérer les rejets non gérés (par exemple, en les enregistrant), vous pouvez utiliser mon unhandled-rejection
module à la place, qui récupère tous les rejets non gérés de chaque implémentation Promises majeure qui le prend en charge, avec un seul gestionnaire d’événements.
Ce module prend en charge Bluebird, ES6 Promises, Q, WhenJS, _es6-promise
_, _then/promise
_ et tout ce qui est conforme aux spécifications de rejet non gérées (détails complets dans la documentation).
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 de pile complète où votre crash se produit.
process.on('unhandledRejection', (error, p) => {
console.log('=== UNHANDLED REJECTION ===');
console.dir(error.stack);
});