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!