Synchronisieren einer Folge von Versprechen
JavaScript-Versprechen bieten einen leistungsstarken Mechanismus für die Handhabung asynchroner Vorgänge. Es gibt jedoch Situationen, in denen wir die Ausführung von Versprechen in einer bestimmten Reihenfolge synchronisieren müssen. Dies stellt eine besondere Herausforderung dar, wenn wir eine vorzeitige Ausführung oder Unterbrechungen durch spätere Versprechen vermeiden möchten.
Manuelle Iteration mit Promise Chaining
Ein einfacher Ansatz zum Synchronisieren von Versprechen ist das Durchlaufen Sie manuell und verketten Versprechen nacheinander:
function sequence(arr) { let index = 0; function next() { if (index < arr.length) { return arr[index++].then(next).catch(e => Promise.reject(e)); } } return next(); }
Diese Funktion durchläuft die Reihe von Versprechen, löst sie nacheinander auf und bearbeitet alle Ablehnungen.
Verwendung der Bluebird Promise Library
Bluebird ist eine beliebte Promise-Bibliothek, die zusätzliche Funktionen für die Parallelitätskontrolle bietet, darunter:
Promise.mapSeries(arr, function(item) { return processItem(item); }).then(function(results) { // process final results here }).catch(function(err) { // process array here });
Verwendung von ES7 Async/Await
ES7 hat die Async/Await-Syntax eingeführt, die die asynchrone Programmierung vereinfacht und eine natürliche Möglichkeit zum Sequenzieren von Versprechen bietet:
async function processArray(array, fn) { let results = []; for (let i = 0; i < array.length; i++) { let r = await fn(array[i]); results.push(r); } return results; // will be resolved value of promise }
Vermeidung einer frühen Ausführung
Um eine vorzeitige Ausführung von zu verhindern Versprechen können Sie innerhalb der Schleife erstellen, anstatt sie im Voraus zu deklarieren. Dadurch wird sichergestellt, dass nur das aktuelle Versprechen ausgeführt wird, bevor das nächste erstellt wird.
function sequenceDynamic(nextPromise) { let index = 0; function next() { const promise = nextPromise(index); if (promise) { return promise.then(() => next(++index)).catch(e => Promise.reject(e)); } } return next(); }
Diese aktualisierte Funktion verwendet eine Rückruffunktion, die das nächste auszuführende Versprechen zurückgibt. Die Funktion iteriert weiter, solange der Rückruf gültige Versprechen zurückgibt.
Fazit
Das Synchronisieren von Versprechen in einer bestimmten Reihenfolge kann durch manuelle Iteration, die Bluebird-Bibliothek, asynchron erreicht werden /await-Syntax oder durch Vermeidung einer frühen Ausführung. Es ist wichtig, den Ansatz auszuwählen, der am besten zu Ihrer Anwendungs- und Entwicklungsumgebung passt.
Das obige ist der detaillierte Inhalt vonWie kann man eine Folge von Promises in JavaScript synchronisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!