"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment pouvez-vous gérer les erreurs dans les rappels asynchrones qui ne relèvent pas de la portée d'une promesse ?

Comment pouvez-vous gérer les erreurs dans les rappels asynchrones qui ne relèvent pas de la portée d'une promesse ?

Publié le 2024-11-04
Parcourir:410

How Can You Handle Errors in Asynchronous Callbacks That Are Not Within a Promise\'s Scope?

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 :

  1. Utilisation de Promise.delay : Promise.delay encapsule un rappel asynchrone pour renvoyer une promesse. Toutes les erreurs générées lors du rappel seront interceptées par la promesse.
  2. Rejet de la promesse environnante : dans la mesure du possible, rejetez la promesse entourant le rappel asynchrone au lieu de lever une exception.

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.

Dernier tutoriel Plus>

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