Asynchrones Arbeiten mit mehreren Versprechen
Dieser Artikel befasst sich mit den Herausforderungen bei der Ausführung mehrerer asynchroner Aufgaben innerhalb von Schleifen und der Notwendigkeit, deren Abschluss sicherzustellen bevor Sie mit nachfolgenden Aufgaben fortfahren.
Stellen Sie sich ein Szenario vor, in dem eine Schleife eine Reihe von Aufgaben durchläuft, die jeweils asynchron ausgeführt werden. Nach der Schleife folgt eine weitere Schleife, die auf dem Abschluss der Aufgaben der ersten Schleife basiert. Wie können wir diese Koordination effizient erreichen?
Promises bieten eine elegante Lösung für dieses Problem. Indem wir ein Versprechen von doSomeAsyncStuff() zurückgeben, können wir die asynchronen Vorgänge verwalten.
Promise.all() ist eine leistungsstarke Methode, die eine Reihe von Versprechen akzeptiert und ein einzelnes Versprechen zurückgibt. Dieses einzelne Versprechen wird nur aufgelöst, wenn alle Eingabezusagen aufgelöst oder eines davon abgelehnt wird.
Um unser Ziel zu erreichen, können wir Promise.all() wie folgt nutzen:
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 });
In dieser Implementierung sammeln wir alle Versprechen in einem Array und übergeben es an Promise.all(). Nach der Lösung (oder Ablehnung) fahren wir mit den Aufgaben der zweiten Schleife fort.
Das folgende Beispiel zeigt die Verwendung von Promise.all(), um auf den Abschluss mehrerer asynchroner Aufgaben zu warten:
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();
Das obige ist der detaillierte Inhalt vonWie kann Promise.all() mehrere asynchrone Aufgaben effizient verarbeiten, bevor mit nachfolgenden Vorgängen fortgefahren wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!