Maison  >  Article  >  interface Web  >  Comment puis-je gérer les exceptions asynchrones avec Bluebird Promises ?

Comment puis-je gérer les exceptions asynchrones avec Bluebird Promises ?

DDD
DDDoriginal
2024-10-26 04:36:02720parcourir

How Can I Handle Asynchronous Exceptions with Bluebird Promises?

Gestion des exceptions asynchrones avec Bluebird Promises

Lorsque vous travaillez avec des routines asynchrones, la gestion des exceptions peut être difficile à gérer. Les promesses, une fonctionnalité clé de Bluebird.js, fournissent un moyen structuré de gérer les exceptions asynchrones.

Le défi

Dans votre exemple de code, un setTimeout est utilisé dans un rappel sans promesse. Lorsqu'une erreur est générée dans ce rappel, le catch de Bluebird ne sera pas déclenché, provoquant le crash du programme.

Structure de promesse de Bluebird

Les promesses interceptent les exceptions lancées dans leur rappel fonctions (constructeur then/catch/Promise). Pour gérer les exceptions des rappels asynchrones, il est crucial de les envelopper dans une promesse.

Gestion élégante des exceptions

Dans votre scénario, vous pouvez inclure le rappel setTimeout dans une promesse . Le bloc catch détectera alors l'erreur :

<code class="javascript">function getPromise() {
  return new Promise(function(resolve, reject) {
    setTimeout(resolve, 500);
  }).then(function() {
    console.log("hihihihi");
    throw new Error("Oh no!");
  });
}</code>

Le rejet est la clé

Ne lancez jamais d'erreurs directement dans les rappels sans promesse. Au lieu de cela, rejetez la promesse environnante. Si nécessaire, utilisez try-catch pour garantir une gestion appropriée.

<code class="javascript">function getPromise() {
  return new Promise(function(resolve, reject) {
    try {
      setTimeout(resolve, 500);
    } catch (err) {
      reject(err);
    }
  });
}</code>

En adhérant à ces principes, vous pouvez garantir une gestion gracieuse des exceptions dans Node.js et dans le navigateur, même pour les rappels asynchrones malveillants.

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