Traitement des promesses indépendamment de l'échec
Lorsque vous travaillez avec un ensemble de promesses qui impliquent des requêtes réseau, il est souvent nécessaire de gérer des scénarios dans lesquels certaines requêtes peut échouer. Par défaut, Promise.all() se termine dès le premier rejet. Cependant, dans certaines situations, vous souhaiterez peut-être attendre que toutes les promesses soient terminées, même pour celles qui ont échoué.
Modèle recommandé
Une approche consiste à utiliser le fonction reflex(), qui convertit une promesse en une promesse qui se résout en un objet de statut avec une propriété remplie ou rejetée. En mappant les promesses de votre tableau à la fonction reflex(), vous pouvez vous assurer que toutes les promesses se terminent, quel que soit leur statut.
const reflect = p => p.then(v => ({ v, status: "fulfilled" }), e => ({ e, status: "rejected" })); Promise.all(arr.map(reflect)).then(results => { const success = results.filter(x => x.status === "fulfilled"); });
Dans cet exemple, Promise.all() est utilisé avec le modifié une série de promesses, attendant qu'elles soient toutes accomplies. Le tableau de réussite contiendra les résultats des promesses réussies, vous permettant de gérer les pannes de réseau avec élégance tout en continuant à poursuivre les actions basées sur les données disponibles.
Solution améliorée (Promise.allSettled)
Promise.allSettled est intégré au JavaScript moderne, qui fournit un moyen plus concis et efficace d'obtenir le comportement souhaité. Il renvoie une promesse qui se résout en un tableau de résultats, chacun contenant un statut réalisé ou rejeté, quel que soit le résultat de la promesse.
Promise.allSettled([promise]).then(([result]) => { // reach here regardless // { status: "fulfilled", value: 33 } });
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!