Gestion des erreurs asynchrones avec le chaînage de promesses
Lorsque vous travaillez avec du code asynchrone, il est crucial de réfléchir à la manière de gérer efficacement les erreurs. Les exceptions non interceptées peuvent faire planter votre application. Il est donc important de mettre en place une stratégie.
Dans le scénario décrit, une promesse est créée avec un setTimeout qui génère une erreur. Le gestionnaire catch de Bluebird Promise ne détectera pas cette erreur car elle se produit dans un rappel asynchrone.
Gestion des exceptions dans les promesses
Les promesses, cependant, peuvent intercepter les exceptions levées dans leurs propres fonctions de rappel. Pour gérer ce type d'erreur, vous pouvez :
function getPromise() {
return new Promise(function(done, reject) {
setTimeout(done, 500);
}).then(function() {
console.log("hihihihi");
throw new Error("Oh no!");
});
}
Ici, l'erreur est renvoyée dans le rappel then, ce qui garantit qu'elle sera interceptée par le gestionnaire catch de la promesse.
Mises en garde concernant les rappels asynchrones
Il est essentiel de se rappeler que les promesses ne détectent pas les exceptions des rappels asynchrones qui ne relèvent pas de leur propre compétence. Pour gérer ces types d'erreurs, considérez :
Exemple de gestion des rappels asynchrones malveillants
Pour gérer un rappel asynchrone malveillant dans Node.js ou dans le navigateur, vous pouvez utiliser l'approche suivante :
function getPromise() {
return new Promise(function(done, reject) {
setTimeout(function() {
try {
// Your rogue async callback here
console.log("hihihihi");
} catch (e) {
reject(e);
}
}, 500);
});
}
En gérant manuellement les exceptions dans le rappel, cette approche garantit qu'elles ne feront pas planter votre application.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3