Maison > interface Web > js tutoriel > Comment Promise.all peut-il améliorer la gestion des opérations asynchrones simultanées et éviter les rejets non gérés ?

Comment Promise.all peut-il améliorer la gestion des opérations asynchrones simultanées et éviter les rejets non gérés ?

Mary-Kate Olsen
Libérer: 2024-12-23 17:03:32
original
764 Les gens l'ont consulté

How Can Promise.all Improve Concurrent Async Operation Handling and Avoid Unhandled Rejections?

En attente d'opérations asynchrones simultanées

Exécution parallèle avec Promise.all

Pour déclencher plusieurs opérations asynchrones simultanément, évitez d'utiliser le modèle dans lequel vous obtenez des promesses puis attendez-les séquentiellement. Au lieu de cela, exploitez la fonction Promise.all :

const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
Copier après la connexion

Cette approche lance les deux opérations asynchrones simultanément et fournit les résultats dans un tableau.

Gestion des promesses rejetées

Le fourni La solution exécute les opérations en parallèle, mais attend la fin de la première avant d’attendre la seconde. Bien que cela permette une exécution parallèle, cela introduit des problèmes dans la gestion des promesses rejetées.

Si la première promesse prend plus de temps à se terminer et que la seconde échoue, Promise.all échouera immédiatement, empêchant le rejet de la première promesse. Cela peut entraîner une erreur de rejet non gérée.

Syntaxe pour l'attente parallèle

Actuellement, il n'existe pas de syntaxe d'attente désignée pour l'attente parallèle, d'où l'alternative d'utiliser Promise.all. Des discussions ont émergé concernant wait.all, indiquant la possibilité d'améliorations futures.

Comparaison des approches

Considérez l'exemple suivant, où getValue1Async prend 500 ms pour être résolu et getValue2Async prend 100 ms pour rejeter :

Séquentiel Exécution :

async () => {
  try {
    const value1 = await getValue1Async();
    const value2 = await getValue2Async();
  } catch (e) {
    console.error(e);
  }
};
Copier après la connexion

Exécution simultanée avec Promise.all :

async () => {
  try {
    const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
  } catch (e) {
    console.timeEnd("Promise.all", e);
  }
};
Copier après la connexion

Sortie :

  • Séquentiel : La sortie de la console affiche un délai de 500 ms avant que l'erreur ne soit enregistrée.
  • Concurrent : La sortie de la console affiche un journal des erreurs après 100 ms.

Conclusion :

L'utilisation de Promise.all permet efficacement l'exécution parallèle d'opérations asynchrones et garantit une gestion appropriée des promesses rejetées.

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