Maison > interface Web > js tutoriel > Comment gérer les exceptions dans les rappels asynchrones avec Bluebird Promises ?

Comment gérer les exceptions dans les rappels asynchrones avec Bluebird Promises ?

Barbara Streisand
Libérer: 2024-11-02 02:24:02
original
712 Les gens l'ont consulté

How to Handle Exceptions in Asynchronous Callbacks with Bluebird Promises?

Gestion asynchrone des exceptions avec Bluebird Promises

Considérez le scénario suivant : vous devez gérer les exceptions dans un environnement contrôlé sans faire planter l'application. Examinons cet exemple spécifique utilisant les promesses Bluebird :

<code class="javascript">var Promise = require('bluebird');

function getPromise(){
    return new Promise(function(done, reject){
        setTimeout(function(){
                throw new Error("AJAJAJA");
        }, 500);
    });
}</code>
Copier après la connexion

Lorsqu'une exception est levée dans le rappel setTimeout, elle est capturée par la boucle d'événements Node.js et enregistrée dans la console, provoquant le crash du programme :

$ node bluebird.js

c:\blp\rplus\bbcode\scratchboard\bluebird.js:6
                throw new Error("AJAJAJA");
                      ^
Error: AJAJAJA
    at null._onTimeout (c:\blp\rplus\bbcode\scratchboard\bluebird.js:6:23)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
Copier après la connexion

Les promesses, cependant, peuvent capturer les exceptions lancées depuis les rappels de leur constructeur. Pour gérer les exceptions lancées dans les rappels asynchrones, vous devez envelopper le rappel avec une promesse qui est rejetée en cas d'erreur.

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

Dans cet exemple modifié, l'exception est interceptée par la chaîne de promesse environnante :

$ node bluebird.js
Error [Error: Oh no!]
Copier après la connexion

N'oubliez pas que les promesses ne détectent pas les exceptions des rappels asynchrones. Dans de tels cas, rejetez toujours la promesse environnante et utilisez des blocs try-catch si nécessaire. Cette approche garantit que les exceptions sont gérées correctement sans faire planter l'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