Maison > Article > interface Web > Comment pouvez-vous gérer les erreurs dans les rappels asynchrones qui ne relèvent pas de la portée d'une promesse ?
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 d'avoir une stratégie en place.
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 qui sont levées dans leurs propres fonctions de rappel. Pour gérer ce type d'erreur, vous pouvez :
<code class="javascript">function getPromise() { return new Promise(function(done, reject) { setTimeout(done, 500); }).then(function() { console.log("hihihihi"); throw new Error("Oh no!"); }); }</code>
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, envisagez :
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 :
<code class="javascript">function getPromise() { return new Promise(function(done, reject) { setTimeout(function() { try { // Your rogue async callback here console.log("hihihihi"); } catch (e) { reject(e); } }, 500); }); }</code>
En gérant manuellement les exceptions dans le rappel, cette approche garantit qu'elles ne feront pas planter votre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!