Maison >interface Web >js tutoriel >Comment puis-je gérer efficacement les pannes de réseau lors de l'utilisation de promesses en JavaScript ?

Comment puis-je gérer efficacement les pannes de réseau lors de l'utilisation de promesses en JavaScript ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-15 17:21:16582parcourir

How Can I Gracefully Handle Network Failures When Using Promises in JavaScript?

Gérer les pannes de réseau avec Promise Waiting

En JavaScript, Promise.all() est un outil puissant pour gérer plusieurs opérations asynchrones. Cependant, cela peut ne pas convenir lorsque vous souhaitez que toutes les promesses se réalisent, même si certaines les rejettent.

Pour gérer ce scénario, vous pouvez implémenter une fonction personnalisée « Promise Reflect » qui convertit les promesses en objets avec des valeurs remplies ou rejetées. status :

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

En utilisant cette fonction de réflexion, vous pouvez mapper le tableau original de promesses à un tableau de promesses réfléchies promesses :

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

Enfin, vous pouvez utiliser Promise.all() pour attendre que toutes les promesses réfléchies se terminent :

Promise.all(reflectedPromises).then(results => {
    var success = results.filter(x => x.status === "fulfilled");
});

Cette approche vous permet de gérer les pannes de réseau avec élégance et de continuer seulement une fois que toutes les demandes ont été complétées. Vous pouvez accéder aux valeurs et aux erreurs résolues à partir des tableaux de réussite et de résultats, respectivement.

Alternativement, vous pouvez désormais utiliser la méthode native Promise.allSettled() :

Promise.allSettled([promise]).then(([result]) => {
    console.log(result);  // Handles both fulfilled and rejected promises
});

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!

Déclaration:
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