Maison >interface Web >js tutoriel >Comment Promise.all() peut-il gérer efficacement plusieurs tâches asynchrones avant de passer aux opérations suivantes ?
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.
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 ?
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.
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 });
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.
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();
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!