Erzielung einer synchronen Ausführung von Promise-Schleifen
Wie stellen Sie die Synchronität von Promise-Aufrufen und ihren verketteten Protokollierungsvorgängen während Schleifeniterationen sicher? Der anfängliche Ansatz mit PromiseWhile() erscheint vielversprechend, wirft jedoch Bedenken hinsichtlich der Beibehaltung der richtigen Ausführungsreihenfolge auf.
Erwägen Sie stattdessen, die inhärenten Fähigkeiten von Versprechen für diese Aufgabe zu nutzen. Indem wir das Problem als eine Reihe asynchroner Aufrufe zum Abrufen von Benutzerdetails und zum Beibehalten der ursprünglichen Antwortreihenfolge definieren, können wir Array.prototype.reduce() verwenden, um eine flache .then()-Kette zu erstellen.
Lösung:
Der folgende Code veranschaulicht diesen Ansatz:
<code class="javascript">function fetchUserDetails(arr) { return arr.reduce(function(promise, email) { return promise.then(function() { return db.getUser(email).done(function(res) { logger.log(res); }); }); }, Promise.resolve()); }</code>
Diese Funktion nimmt ein Array von E-Mail-Adressen und gibt ein Versprechen zurück. Die Funktion „reduce()“ durchläuft das Array und führt das getUser-Versprechen für jede E-Mail aus. Die Ergebnisse werden synchron im done()-Callback protokolliert.
Aufruf der Funktion:
Um die Funktion aufzurufen, füllen Sie ein Array von E-Mail-Adressen (arrayOfEmailAddys) und verwenden Sie es wie folgt:
<code class="javascript">fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });</code>
Dieser Code erstellt eine lineare Promise-Kette und stellt sicher, dass jedes Promise nacheinander aufgelöst wird und die Protokollierungsvorgänge in der richtigen Reihenfolge ausgeführt werden.
Das obige ist der detaillierte Inhalt vonWie erreicht man eine synchrone Ausführung von Promise-Schleifen unter Beibehaltung der Ordnung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!