Maison > interface Web > js tutoriel > Comment puis-je gérer plusieurs promesses, y compris celles rejetées, en JavaScript ?

Comment puis-je gérer plusieurs promesses, y compris celles rejetées, en JavaScript ?

Susan Sarandon
Libérer: 2024-12-18 06:07:14
original
886 Les gens l'ont consulté

How Can I Handle Multiple Promises, Including Rejected Ones, in JavaScript?

Gérer les promesses avec des résolutions mixtes

Dans la programmation asynchrone, gérer des ensembles de promesses peut poser des défis. Considérez un scénario dans lequel vous avez plusieurs requêtes réseau et l’une d’entre elles est susceptible d’échouer. Par défaut, Promise.all() arrête le processus avec une erreur dès qu'une promesse est rejetée. Cela peut ne pas être souhaitable si vous souhaitez capturer les réponses de toutes les demandes.

Modèle sans bibliothèque de promesses

Une solution sans utiliser de bibliothèque de promesses consiste à envelopper chaque promesse avec une fonction "réfléchir". Cette fonction renvoie une nouvelle promesse qui se résout avec la valeur ou l'erreur de la promesse d'origine et inclut une propriété « statut » indiquant le succès ou le rejet.

const reflect = p => p.then(v => ({ v, status: "fulfilled" }),
                            e => ({ e, status: "rejected" }));
Copier après la connexion

Vous pouvez ensuite mapper chaque promesse à une promesse de réflexion et appeler Promise.all() sur le tableau mappé :

var arr = [fetch('index.html'), fetch('http://does-not-exist')]

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

Cette approche vous permet de gérer à la fois les promesses réussies et rejetées gracieusement.

Promise.allSettled() intégrée

Notez que les navigateurs modernes et les environnements JavaScript disposent désormais d'une méthode native Promise.allSettled() qui fournit des fonctionnalités similaires. Il renvoie une promesse qui se résout avec un tableau de résultats, chacun représentant le statut et la valeur (si elle est remplie) de la promesse originale correspondante.

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