Maison >interface Web >js tutoriel >Comment puis-je gérer plusieurs promesses, y compris celles rejetées, en 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" }));
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"); });
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!