Promises nacheinander mit Array-Parametern ausführen
In einigen Szenarien müssen Sie möglicherweise Versprechen nacheinander ausführen und dabei Parameter aus einem Array übergeben. Dies wird notwendig, wenn das Array dynamisch gefüllt wird und die Reihenfolge der Ausführung entscheidend ist.
Ein Ansatz zum Erstellen einer „pausierbaren Schleife“ ist die wiederholte Verwendung der .then-Methode. Dies kann jedoch umständlich sein und zu einer pyramidenförmigen Versprechenskette führen.
Versprechen verwenden
Eine sauberere Lösung besteht darin, Array.reduce zu verwenden, um die Versprechenskette zu einem einzigen Versprechen zusammenzufassen:
myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() )
Dieser Ansatz erstellt eine Reihe verketteter Versprechen und gewährleistet so eine sequentielle Ausführung.
Verwendung asynchroner Funktionen
Alternativ ermöglichen asynchrone Funktionen eine besser lesbare und effizientere Implementierung. Das folgende Beispiel verwendet eine asynchrone Funktion, um die Versprechen zu iterieren und auszuführen:
const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x) } } forEachSeries(myArray, myPromise)
Rückgabewerte sammeln
Wenn Sie die Rückgabewerte der Versprechen sammeln müssen, können Sie eine modifizierte Version verwenden der forEachSeries-Funktion namens „mapSeries“:
const mapSeries = async (iterable, fn) => { const results = [] for (const x of iterable) { results.push(await fn(x)) } return results }
Diese Funktion iteriert durch das Iterable, sammelt die Ergebnisse der Versprechen und gibt ein Array der Ergebnisse zurück.
Mit diesen Techniken können Sie Führen Sie Versprechen einfach nacheinander aus, übergeben Sie Parameter aus einem Array, stellen Sie die Ausführungsreihenfolge sicher und sammeln Sie die Ergebnisse nach Bedarf.
Das obige ist der detaillierte Inhalt vonWie führe ich Versprechen sequentiell mit Array-Parametern aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!