Maison  >  Article  >  interface Web  >  Comment gérer les erreurs individuelles dans Promise.all et accéder aux données de promesse non affectées ?

Comment gérer les erreurs individuelles dans Promise.all et accéder aux données de promesse non affectées ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-29 18:29:50878parcourir

How to Handle Individual Errors in Promise.all and Access Unaffected Promise Data?

Détection des erreurs dans Promise.all

Problème :

Lors de l'utilisation de Promise.all pour gérer un éventail de promesses, détecter les erreurs de promesse individuelles est un défi car Promise.all renvoie la première erreur rencontrée et ignore le reste. Par conséquent, les données des promesses non affectées dans le tableau deviennent inaccessibles.

Solution :

Le comportement inhérent de Promise.all est de renvoyer un tableau de valeurs résolues ou de le rejeter avec une seule erreur en cas de rejet d'une promesse de membre.

Cependant, vous pouvez modifier votre code comme suit pour gérer les erreurs individuelles tout en recevant les valeurs des promesses réussies :

existingPromiseChain = existingPromiseChain.then(function() {
  var arrayOfPromises = state.routes.map(function(route) {
    return route.handler.promiseHandler()
      .then(function(data) {
        return data;
      })
      .catch(function(err) {
        return { error: err };
      });
  });
  return Promise.all(arrayOfPromises);
});

existingPromiseChain = existingPromiseChain.then(function(arrayResolved) {
  // do stuff with my array of resolved promises (values or error objects), eventually ending with a res.send();
});

Explication :

En détectant les erreurs individuellement et en renvoyant les objets d'erreur, vous permettez à Promise.all de résoudre avec un tableau qui contient à la fois les valeurs résolues et les objets d'erreur. Votre bloc then() suivant peut alors gérer ce tableau mixte en conséquence.

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