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
Barbara Streisandoriginal
2024-11-02 02:24:02724parcourir

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>

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)

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>

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

$ node bluebird.js
Error [Error: Oh no!]

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!

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