Maison > Article > interface Web > Comment gérer les exceptions dans les rappels asynchrones avec 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!