Maison > interface Web > js tutoriel > Comment Promise.all() peut-il gérer efficacement plusieurs tâches asynchrones avant de passer aux opérations suivantes ?

Comment Promise.all() peut-il gérer efficacement plusieurs tâches asynchrones avant de passer aux opérations suivantes ?

Patricia Arquette
Libérer: 2024-12-15 19:19:15
original
840 Les gens l'ont consulté

How Can Promise.all() Efficiently Handle Multiple Asynchronous Tasks Before Proceeding to Subsequent Operations?

Travailler avec plusieurs promesses de manière asynchrone

Cet article vise à aborder les défis liés à l'exécution de plusieurs tâches asynchrones au sein de boucles et la nécessité de garantir leur achèvement avant de procéder aux tâches suivantes.

Problème : gestion des tâches asynchrones dans Boucles

Imaginez un scénario dans lequel une boucle parcourt un ensemble de tâches, chacune étant exécutée de manière asynchrone. Après la boucle, une autre boucle repose sur l'achèvement des tâches de la première boucle. Comment pouvons-nous réaliser cette coordination efficacement ?

Promises et Promise.all()

Les promesses offrent une solution élégante à ce problème. En renvoyant une promesse de doSomeAsyncStuff(), nous pouvons gérer les opérations asynchrones.

Promise.all() est une méthode puissante qui accepte un tableau de promesses et renvoie une seule promesse. Cette promesse unique n'est résolue que lorsque toutes les promesses d'entrée sont résolues ou que l'une d'entre elles est rejetée.

Mise en œuvre

Pour atteindre notre objectif, nous pouvons exploiter Promise.all() comme suit :

const promises = [];

for (let i = 0; i < 5; i++) {
  promises.push(doSomeAsyncStuff());
}

Promise.all(promises)
  .then(() => {
    // Execute tasks that require all async tasks to finish
  })
  .catch((e) => {
    // Handle errors
  });
Copier après la connexion

Dans cette implémentation, nous collectons toutes les promesses dans un tableau et le transmettons à Promise.all(). Une fois sa résolution (ou son rejet), nous procédons aux tâches de la deuxième boucle.

Considérations supplémentaires

  • Pour plus de clarté, utilisez const ou let au lieu de var.
  • Envisagez de gérer les erreurs en utilisant la méthode catch.
  • Pour plus de compréhension, consultez la documentation de MDN sur les promesses et mon livre "JavaScript : The New Toys" (liens fournis dans mon profil).

Exemple

L'exemple suivant montre l'utilisation de Promise.all() pour attendre la fin de plusieurs tâches asynchrones :

function doSomethingAsync(value) {
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log("Resolving " + value);
      resolve(value);
    }, Math.floor(Math.random() * 1000));
  });
}

function test() {
  const promises = [];

  for (let i = 0; i < 5; i++) {
    promises.push(doSomethingAsync(i));
  }

  Promise.all(promises)
    .then((results) => {
      console.log("All done", results);
    })
    .catch((e) => {
      // Handle errors
    });
}

test();
Copier après la connexion

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