„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 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?

Veröffentlicht am 04.11.2024
Durchsuche:748

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

Bei der Arbeit mit versprechungsbasiertem Code ist 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 „reduction()“ 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 garantiert, dass die Ausführung der „db.getUser“-Aufrufe seriell erfolgt, 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, selbst wenn es um asynchrone Vorgänge geht.

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