Heim >Web-Frontend >js-Tutorial >Wie kann man Daten zwischen Versprechen in JavaScript effizient sequenzieren und teilen?

Wie kann man Daten zwischen Versprechen in JavaScript effizient sequenzieren und teilen?

DDD
DDDOriginal
2024-12-01 02:52:11635Durchsuche

How to Efficiently Sequence and Share Data Between Promises in JavaScript?

So sequenzieren und teilen Sie Daten in Promise-Ketten

Promises bieten ein leistungsstarkes Tool zum Verwalten asynchroner Vorgänge in JavaScript. Dabei ist es notwendig, Vorgänge zu sequenzieren und Daten zwischen ihnen auszutauschen. Lassen Sie uns das spezifische Problem angehen:

HTTP-Anfragen und Datenaustausch mit Versprechen verketten

In diesem Szenario verwenden Sie Versprechen, um eine Reihe von HTTP-Anfragen auszuführen Die Antwort einer Anfrage sollte als Eingabe für die nächste verwendet werden. Die callhttp-Funktion verarbeitet diese Anfragen, muss jedoch auf Daten früherer Anfragen zugreifen, um die nächste zu erstellen. Konkret möchten Sie den aus der ersten Anfrage erhaltenen API-Schlüssel an nachfolgende Anfragen weitergeben.

Ansätze für die gemeinsame Nutzung und Sequenzierung von Daten

Es gibt mehrere Ansätze, um dies zu erreichen:

1. Verkettete Versprechen:

Verketten Sie die Versprechen mithilfe von then und übergeben Sie Zwischendaten als Argumente:

callhttp(url1, payload)
    .then(firstResponse => {
        // Use the data from firstResponse in the next request
        return callhttp(url2, payload, firstResponse.apiKey);
    })
    .then(secondResponse => {
        // Use the combined data from firstResponse and secondResponse in the next request
        return callhttp(url3, payload, firstResponse.apiKey, secondResponse.userId);
    });

2. Höhere Bereichszuweisung:

Zwischenergebnisse Variablen in einem höheren Bereich zuweisen:

var firstResponse;
callhttp(url1, payload)
    .then(result => {
        firstResponse = result;
        return callhttp(url2, payload);
    })
    .then(secondResponse => {
        // Use both firstResponse and secondResponse here
    });

3. Ergebnisse akkumulieren:

Ergebnisse in einem akkumulierenden Objekt speichern:

var results = {};
callhttp(url1, payload)
    .then(result => {
        results.first = result;
        return callhttp(url2, payload);
    })
    .then(result => {
        results.second = result;
        return callhttp(url3, payload);
    })
    .then(() => {
        // Use the accumulated results in results object
    });

4. Verschachtelte Versprechen:

Nest verspricht, den Zugriff auf alle vorherigen Ergebnisse aufrechtzuerhalten:

callhttp(url1, payload)
    .then(firstResponse => {
        // Use firstResponse here
        return callhttp(url2, payload)
            .then(secondResponse => {
                // Use both firstResponse and secondResponse here
                return callhttp(url3, payload);
                    .then(thirdResponse => {
                        // Use all three responses here
                    });
            });
    });

5. Teilen Sie mit Promise.all():

Wenn einige Anfragen unabhängig voneinander gestellt werden können, teilen Sie die Kette in einzelne Teile auf und verwenden Sie Promise.all(), um die Ergebnisse zu sammeln:

const first = callhttp(url1, payload);
const second = callhttp(url2, payload);
const third = callhttp(url3, payload);

Promise.all([first, second, third])
    .then(results => {
        // Use all three results here
    });

ES7 Async/Await:

In ES7 optimiert die Async/Await-Syntax den Prozess der Sequenzierung und Handhabung versprochener Ergebnisse, wodurch ein einfacherer und besser lesbarer Code bereitgestellt wird:

async function httpRequests() {
    const firstResponse = await callhttp(url1, payload);
    const secondResponse = await callhttp(url2, payload, firstResponse.apiKey);
    const thirdResponse = await callhttp(url3, payload, firstResponse.apiKey, secondResponse.userId);

    // Use all three responses here
}

httpRequests();

Das obige ist der detaillierte Inhalt vonWie kann man Daten zwischen Versprechen in JavaScript effizient sequenzieren und teilen?. 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