Maison > interface Web > js tutoriel > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-26 10:06:02
original
897 Les gens l'ont consulté

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 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>
Copier après la connexion

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 :

  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 détecté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 lancer 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 :

<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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal