Gestion des erreurs dans Promise.all
Lorsque vous travaillez avec un tableau de promesses, Promise.all permet leur résolution simultanée. Cependant, si une erreur se produit dans l’une des promesses, la chaîne entière est rejetée, masquant ainsi les autres résolutions réussies. Cet article aborde le défi de la gestion efficace des erreurs individuelles de Promise au sein d'une chaîne Promise.all.
Promise.all adhère au principe « tout ou rien ». Soit il se résout avec un tableau comprenant les valeurs résolues de toutes les promesses, soit il est rejeté dès qu'une seule promesse rencontre une erreur. Par conséquent, toute erreur pouvant survenir dans d'autres promesses passe inaperçue.
Pour gérer les erreurs de promesse individuelles, certaines bibliothèques proposent des alternatives comme Promise.when, qui attend la résolution ou le rejet de toutes les promesses du tableau. Cependant, nous nous concentrerons sur une approche plus courante utilisant Promise.all natif de JavaScript.
Dans le code fourni, l'utilisateur tente d'ajouter une instruction catch pour intercepter les erreurs Promise individuelles, mais le bloc catch, malheureusement, ne le fait pas. ne s'active pas. Voici une version modifiée du code qui devrait résoudre le problème :
existingPromiseChain = existingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ return route.handler.promiseHandler() .then(function(data) { return data; }) .catch(function(err) { return err; }); }); return Promise.all(arrayOfPromises) }); existingPromiseChain.then(function(arrayResolved) { // Process resolved values or errors from the Promises }); // Always terminate the promise chain with a catch to capture any potential errors .catch(function(err) { console.log(err.message); // Log error message if any coding error occurred });
Ce code révisé enveloppe chaque promesse (route.handler.promiseHandler()) avec un bloc then/catch. En cas d'erreur, le bloc catch renvoie l'objet d'erreur, qui est ensuite inclus dans le tableau avec lequel Promise.all résout.
En adhérant au comportement tout ou rien de Promise.all, cette approche nous permet de gérer les erreurs de promesse individuelles avec élégance tout en bénéficiant des avantages de la résolution simultanée des promesses. Par conséquent, les développeurs peuvent gérer en toute confiance les erreurs de Promise dans leurs applications sans perdre les avantages offerts par Promise.all.
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!