Maison >interface Web >js tutoriel >Comment suspendre l'exécution jusqu'à ce que plusieurs promesses soient résolues ?
Renvoyer plusieurs promesses et suspendre l'exécution jusqu'à ce que tout soit terminé
Vous devez gérer plusieurs opérations asynchrones avec une méthode qui renvoie des promesses. Une fois ces opérations terminées, vous souhaitez exécuter un autre ensemble de code uniquement lorsque toutes les promesses ont été résolues.
Promesses dans doSomeAsyncStuff()
Votre fonction doSomeAsyncStuff() doit rendre une promesse. Cette promesse reflète l'achèvement de la tâche asynchrone :
function doSomeAsyncStuff() { return new Promise((resolve, reject) => { var editor = generateCKEditor(); editor.on('instanceReady', () => { doSomeStuff(); resolve(true); }); }); }
Utilisation de Promise.all()
Une fois que votre fonction asynchrone renvoie une promesse, vous pouvez utiliser Promise. all() pour regrouper ces promesses en une seule Promesse :
const promises = []; for (let i = 0; i < 5; i++) { promises.push(doSomeAsyncStuff()); } Promise.all(promises) .then(() => { for (let i = 0; i < 5; i++) { doSomeStuffOnlyWhenTheAsyncStuffIsFinish(); } }) .catch((error) => { // Handle errors here });
Exemple
Vous trouverez ci-dessous un exemple qui enregistre un message une fois les cinq tâches asynchrones terminées :
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((error) => { // Handle errors here }); } 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!