Maison  >  Article  >  interface Web  >  Comment les promesses de Bluebird peuvent-elles résoudre le défi de la gestion asynchrone des exceptions dans Node.js ?

Comment les promesses de Bluebird peuvent-elles résoudre le défi de la gestion asynchrone des exceptions dans Node.js ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 00:57:27600parcourir

How Can Bluebird Promises Solve the Challenge of Asynchronous Exception Handling in Node.js?

Gestion des exceptions asynchrones avec Bluebird Promises : découvrir l'énigme

Lors de la gestion de scénarios asynchrones, il est crucial d'empêcher le nœud de planter à cause de rappels malveillants. Dans cet article, nous explorerons les meilleures pratiques d'utilisation des promesses Bluebird pour relever ce défi.

Gestion des exceptions avec délais d'attente

Considérez le scénario suivant :

function getPromise() {
  return new Promise((done, reject) => {
    setTimeout(() => {
      throw new Error("AJAJAJA");
    }, 500);
  });
}

...

En lançant une exception dans setTimeout, nous contournons le mécanisme de gestion des erreurs de Bluebird et plantons le programme. Cependant, si l'exception se produit avant setTimeout, Bluebird la capture avec succès :

function getPromise() {
  return new Promise((done, reject) => {
    throw new Error("Oh no!");
    setTimeout(() => {
      console.log("hihihihi");
    }, 500);
  });
}
...

Cela démontre que les promesses n'interceptent pas les exceptions des rappels asynchrones. Au lieu de cela, ils gèrent les erreurs uniquement dans leurs rappels de constructeur ou dans leurs rappels then/catch.

La solution : gestion des erreurs dans les rappels asynchrones

Pour éviter les plantages de nœuds, ne lancez jamais d'erreurs dans les rappels asynchrones personnalisés. Au lieu de cela, rejetez la promesse environnante. Considérez la modification suivante :

function getPromise() {
  return new Promise((done, reject) => {
    setTimeout(() => {
      done();
    }, 500);
  }).then(() => {
    console.log("hihihihi");
    throw new Error("Oh no!");
  });
}
...

En utilisant then pour encapsuler l'opération asynchrone, nous pouvons désormais gérer l'erreur dans le rappel Bluebird.

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!

Déclaration:
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