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} });
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); });
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"); });
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!