Maison > interface Web > js tutoriel > Comment puis-je attendre que toutes les promesses soient tenues, même si certaines échouent ?

Comment puis-je attendre que toutes les promesses soient tenues, même si certaines échouent ?

Mary-Kate Olsen
Libérer: 2025-01-03 11:08:39
original
179 Les gens l'ont consulté

How Can I Wait for All Promises to Settle, Even if Some Fail?

Attendre toutes les promesses, quel que soit l'échec

Dans les scénarios où vous avez une série de promesses faisant des requêtes réseau qui peuvent rencontrer des échecs, vous préférerez peut-être attendre que toutes les promesses soient terminées avant de continuer, même si certaines échouent.

La méthode intégrée Promise.allSettled fournit une solution simple :

Promise.allSettled([promise]).then(([result]) => {
  // Reached regardless of outcome
  // {status: "fulfilled", value: 33}
});
Copier après la connexion

Avant l'introduction de Promise.allSettled, vous pouvez utiliser une fonction de réflexion pour obtenir le même résultat :

const reflect = (p) => p.then(
  (v) => ({ v, status: "fulfilled" }),
  (e) => ({ e, status: "rejected" })
);

reflect(promise).then((v) => {
  console.log(v.status);
});
Copier après la connexion

Vous pouvez également étendre la fonction de réflexion à travaillez avec un éventail de promesses :

function reflect(promises) {
  return Promise.all(promises.map((p) => {
    return p.then((v) => ({ v: v, status: "fulfilled" }),
                   (e) => ({ e: e, status: "rejected" }));
  }));
}

reflect(promises).then((results) => {
  var success = results.filter((x) => x.status === "fulfilled");
});
Copier après la connexion

En utilisant ces techniques, vous pouvez gérer avec élégance les pannes de réseau et garantir que votre code continue de s'exécuter comme prévu, que certaines promesses réussissent ou non.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal