Gestion simultanée de plusieurs opérations asynchrones
Dans les scénarios où une séquence d'opérations asynchrones (représentées sous forme de promesses) est exécutée, il devient nécessaire de déterminer lorsque toutes ces opérations sont terminées avant de procéder aux tâches suivantes. Cet article propose une solution à ce défi en tirant parti de la méthode Promise.all().
Comme vous l'avez mentionné, la fonction doSomeAsyncStuff() effectue des tâches asynchrones. En le modifiant pour renvoyer une promesse, nous pouvons capturer l'état d'achèvement de chaque opération asynchrone. Cela nous permet de collecter toutes ces promesses dans un tableau, qui est ensuite transmis à Promise.all().
La méthode Promise.all() accepte un tableau de promesses comme paramètre. Une fois que toutes les promesses du tableau ont été résolues ou rejetées, Promise.all() renvoie une seule promesse. Cette promesse unique se résout en un tableau de résultats (ou de raisons de rejet) des promesses individuelles.
Dans votre code, vous pouvez l'implémenter en incorporant les étapes suivantes :
const promises = []; // Create a Promise for each asynchronous operation for (let i = 0; i < 5; i++) { promises.push(doSomeAsyncStuff()); } // Use Promise.all to wait for all the Promises to resolve Promise.all(promises) .then(() => { // All asynchronous operations have completed. Execute subsequent tasks here. for (let i = 0; i < 5; i++) { doSomeStuffOnlyWhenTheAsyncStuffIsFinish(); } }) .catch((e) => { // Handle any errors that occurred during the asynchronous operations. });
Par en utilisant Promise.all(), vous pouvez efficacement vous assurer que toutes les opérations asynchrones se sont terminées avec succès avant d'exécuter des tâches qui dépendent de leurs résultats.
Pour plus de précisions, reportez-vous au document fourni. exemple :
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 here }); } test();
Dans cet exemple, nous définissons une fonction asynchrone doSomethingAsync() qui se résout avec un délai aléatoire. Nous créons un tableau de promesses et utilisons Promise.all() pour attendre qu'elles soient toutes résolues. Une fois qu'ils ont tous terminé avec succès, nous pouvons procéder à nos tâches suivantes.
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!