Maison  >  Article  >  interface Web  >  Comment gérer les exceptions non gérées dans les rappels asynchrones avec les promesses Bluebird ?

Comment gérer les exceptions non gérées dans les rappels asynchrones avec les promesses Bluebird ?

DDD
DDDoriginal
2024-10-26 16:39:30947parcourir

How do you handle unhandled exceptions in asynchronous callbacks with Bluebird promises?

Gestion des exceptions asynchrones avec les promesses Bluebird

Q : Comment gérer les exceptions non gérées dans les rappels asynchrones avec les promesses Bluebird ?

Les promesses Bluebird n'attrapent pas intrinsèquement les exceptions lancées par les rappels asynchrones, contrairement aux domaines.

A : Utilisez les constructeurs de promesses ou les fermetures then() pour gérer les exceptions

Pour intercepter les exceptions dans les rappels asynchrones, enveloppez le rappel dans un constructeur de promesse ou la fermeture then() :

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

Évitez de lancer des rappels asynchrones personnalisés

Jamais lancez des exceptions directement dans les rappels asynchrones personnalisés (en dehors des rappels de promesse). Au lieu de cela, rejetez la promesse environnante :

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

Exemple

Utilisation d'un constructeur de promesse :

<code class="javascript">var p = getPromise();
    p.then(function(){
        console.log("Yay");
    }).error(function(e){
        console.log("Rejected",e);
    }).catch(Error, function(e){
        console.log("Error",e);
    }).catch(function(e){
        console.log("Unknown", e);
    });</code>

Sortie :

Error [Error: Oh no!]

Cette approche garantit que les exceptions sont détectées et traitées de manière appropriée, empêchant ainsi l'application de planter.

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