„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie sequenziere ich die Promise-Ausführung mit der Parameterübergabe aus einem Array?

Wie sequenziere ich die Promise-Ausführung mit der Parameterübergabe aus einem Array?

Veröffentlicht am 18.11.2024
Durchsuche:350

How to Sequence Promise Execution with Parameter Passing from an Array?

Sequentielle Ausführung von Versprechen mit Parameterübergabe aus einem Array

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?

Lösung: Iterative Versprechensausführung

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.

Asynchrone Funktionsalternative

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.

Ergebnisse sammeln

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.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729407377 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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