Stellen Sie sich das Szenario vor, in dem Sie ein Array von Werten haben (z. B. myArray) und ein Versprechen ausführen müssen. basierte Funktion (z. B. myPromise) nacheinander und übergibt jedes Array-Element als Parameter. Wie können Sie eine „pausierbare Schleife“ implementieren, die sicherstellt, dass die Versprechen in der richtigen Reihenfolge aufgelöst werden?
Um eine sequenzielle Ausführung zu erreichen, können Sie eine Kombination aus Versprechensverkettung verwenden und iterative Verarbeitung. Hier ist ein Codeausschnitt, der zeigt, wie das geht:
myArray.reduce( (p, x) => p.then(() => myPromise(x)), Promise.resolve() )
Dieser Ansatz nutzt die Reduce-Methode, um das Array zu durchlaufen und eine Reihe verketteter Versprechen zu erstellen. Jedes Versprechen wird aufgelöst, nachdem das vorherige Versprechen abgeschlossen ist, wodurch die gewünschte Ausführungsreihenfolge effektiv erzwungen wird.
Wenn Sie Unterstützung für asynchrone Funktionen haben, ist eine sauberere Lösung mit forEachSeries verfügbar function:
const forEachSeries = async (iterable, action) => { for (const x of iterable) { await action(x) } } forEachSeries(myArray, myPromise)
Diese Funktion durchläuft das Array und hält bei jedem Element an. Sie wartet darauf, dass das Versprechen aufgelöst wird, bevor mit der nächsten Iteration fortgefahren wird.
Wenn Sie die Rückgabewerte der Versprechen in einem Array sammeln müssen, können Sie die Funktion forEachSeries wie folgt ändern:
const mapSeries = async (iterable, fn) => { const results = [] for (const x of iterable) { results.push(await fn(x)) } return results }
Diese Funktion durchläuft das Array, sammelt die Ergebnisse der Versprechen im Ergebnisarray und gibt schließlich die gesammelten Ergebnisse zurück.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3