Gestion des erreurs dans Promise.all : une approche pratique
Promise.all est un outil puissant pour combiner plusieurs tâches asynchrones. Cependant, il gère les erreurs différemment des promesses individuelles, ce qui entraîne souvent de la confusion. Cet article approfondit le comportement de Promise.all et présente une solution pratique pour gérer efficacement les erreurs.
Promise.all vs. Individual Promises
Promise.all prend un tableau de promesses et renvoie une promesse qui se règle dès que toutes les promesses d'entrée se stabilisent. Contrairement aux promesses individuelles, Promise.all résout avec un tableau de valeurs ou rejette avec une seule erreur. Cela signifie que si l'une des promesses d'entrée est rejetée, Promise.all la rejettera immédiatement avec cette erreur, quel que soit le statut des promesses restantes.
Capture des erreurs de promesse individuelles
Pour capturer les erreurs dans les promesses individuelles dans Promise.all, il est tentant d'utiliser .catch sur chaque promesse. Cependant, cette approche n'est pas efficace car Promise.all rejettera toujours la première erreur rencontrée, ignorant les erreurs des autres promesses.
Au lieu de cela, une solution plus robuste consiste à utiliser .catch sur Promise.all s'appeler. En gérant les erreurs à ce niveau, vous pouvez accéder à un tableau contenant un mélange de valeurs de promesses résolues et d'objets d'erreur de promesses rejetées.
Vous trouverez ci-dessous un exemple de mise en œuvre de cette approche :
const arrayOfPromises = state.routes.map(route => route.handler.promiseHandler()); Promise.all(arrayOfPromises) .then(arrayResolved => { // Handle array of resolved promises and errors here... }) .catch(err => { console.error(err); // Log the composite error });
Gestion des promesses personnalisées
Si le comportement par défaut de Promise.all ne convient pas à votre application, vous pouvez envisager de mettre en œuvre une solution de gestion des promesses personnalisée. Une approche populaire consiste à créer une fonction Promise.when qui se résout uniquement une fois que toutes les promesses ont été résolues ou rejetées. Cependant, cette approche ne fait actuellement pas partie de la spécification ES6.
Conclusion
La gestion des erreurs dans Promise.all nécessite une compréhension nuancée de son comportement. En tirant parti de .catch sur l'appel Promise.all, vous pouvez capturer les erreurs des promesses individuelles tout en préservant les valeurs résolues. Cette approche offre une plus grande flexibilité et un plus grand contrôle sur la résolution des promesses, vous permettant de gérer efficacement les tâches asynchrones.
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!