Heim >Web-Frontend >js-Tutorial >Wie kann die synchrone Ausführung von Promise-basiertem Code in einer Schleife sichergestellt werden?

Wie kann die synchrone Ausführung von Promise-basiertem Code in einer Schleife sichergestellt werden?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 19:22:30336Durchsuche

How to Ensure Synchronous Execution of Promise-Based Code in a Loop?

Die richtige Schleifenstruktur finden, um sicherzustellen, dass versprechungsbasierter Code synchron ausgeführt wird

Beim Arbeiten mit versprechungsbasiertem Code gilt die richtige Schleifenstruktur unerlässlich, um die synchrone Ausführung asynchroner Vorgänge zu gewährleisten. Im gegebenen Szenario besteht das Ziel darin, eine Schleife zu konstruieren, die die Ausführung von „db.getUser(email).then(function(res) { logger.log(res); })“ in der richtigen Reihenfolge während jeder Iteration sicherstellt.

Ein Ansatz verwendet eine benutzerdefinierte „promiseWhile“-Funktion. Während diese Methode für allgemeine Szenarien nützlich sein kann, führt sie für den konkreten Fall zu unnötiger Komplexität. Stattdessen besteht eine einfachere Lösung darin, integrierte Array-Manipulationsfunktionen wie map() und Reduce() zu nutzen.

Parallele vs. serielle Versprechen

Das Problem liegt darin in der Anforderung, die Reihenfolge der Antworten beizubehalten, wodurch die Verwendung eines parallelen Ansatzes über Array.prototype.map() entfällt. Um die gewünschte Promise-Kette mit beibehaltener Reihenfolge zu konstruieren, ist Array.prototype.reduce() besser geeignet.

Beispiel:

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());
}

Durch die Verwendung dieser Methode wird die Ausführung der „db. getUser“-Aufrufe erfolgen garantiert seriell, wodurch sichergestellt wird, dass die Reihenfolge der Ergebnisse beibehalten wird. Der Code kann wie folgt aufgerufen werden:

var arrayOfEmailAddys = [...];

fetchUserDetails(arrayOfEmailAddys).then(function() {
    console.log('all done');
});

Dieser Ansatz macht komplexe Schleifen oder Bedingungen überflüssig und stellt die ordnungsgemäße Ausführung der Versprechenskette sicher, auch wenn es sich um asynchrone Vorgänge handelt.

Das obige ist der detaillierte Inhalt vonWie kann die synchrone Ausführung von Promise-basiertem Code in einer Schleife sichergestellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn