Problem:
Bei der traditionellen asynchronen Programmierung erfolgt die gleichzeitige Ausführung mehrerer Warteoperationen ist aufgrund der Sequenzierung blockiert Verarbeitung.
Ursache:
Der betreffende Code wartet auf den Abschluss des ersten Wartevorgangs, bevor er den zweiten initiiert.
Vorgeschlagene Lösung :
Der ursprüngliche Vorschlag, Zusagen einzuholen, bevor man sie separat abwartet, ermöglicht eine parallele Ausführung. Es führt jedoch zu Problemen bei der Fehlerbehandlung und potenziell nicht behandelten Ablehnungsfehlern.
Empfohlener Ansatz:
Anstelle der vorgeschlagenen Lösung empfehlen wir die Verwendung von Promise.all:
const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
Vorteile von Promise.all:
Beispiel:
Betrachten Sie das folgende Beispiel, das den Unterschied in Timing und Fehlerbehandlung demonstriert:
const getValue1Async = () => { return new Promise(resolve => { setTimeout(resolve, 500, "value1"); }); }; const getValue2Async = () => { return new Promise((resolve, reject) => { setTimeout(reject, 100, "error"); }); }; // Sequential execution with proposed solution (async () => { try { console.time("sequential"); const p1 = getValue1Async(); const p2 = getValue2Async(); const value1 = await p1; const value2 = await p2; } catch (e) { console.error(e); } console.timeEnd("sequential"); })(); // Concurrent execution with Promise.all setTimeout(async () => { try { console.time("concurrent"); const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]); } catch (e) { console.timeEnd("concurrent", e); } }, 1000);
Im Beispiel für eine sequentielle Ausführung: Der Code wartet 500 ms auf den Abschluss der ersten Operation, bevor er die zweite initiiert. Im Gegensatz dazu behandelt das Beispiel für die gleichzeitige Ausführung den Fehler des zweiten Vorgangs unmittelbar nach 100 ms.
Das obige ist der detaillierte Inhalt vonWie kann Promise.all die gleichzeitige Ausführung von Wartevorgängen und die Fehlerbehandlung verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!