Heim >Web-Frontend >js-Tutorial >Wie kann ich übermäßige API-Anfragen verhindern, wenn ich Async/Await in JavaScript verwende?

Wie kann ich übermäßige API-Anfragen verhindern, wenn ich Async/Await in JavaScript verwende?

Susan Sarandon
Susan SarandonOriginal
2024-12-15 12:34:11378Durchsuche

How Can I Prevent Excessive API Requests When Using Async/Await in JavaScript?

Kombination von Async-Funktionen, Await und setTimeout

Dieses Handbuch nutzt die neuesten JavaScript-Async-Funktionen und bietet eine Lösung für ein häufiges Leistungsproblem: Senden übermäßiger Anfragen an Google APIs in kurzer Zeit. Das Ziel besteht darin, eine Schlaffunktion einzuführen, um Anfragen zu verzögern und die Skriptleistung zu verbessern.

Originalcode:

Dieser anfängliche Code nutzt das Async/Wait-Muster effizient:

async function asyncGenerator() {
    while (goOn) {
        var fileList = await listFiles(nextPageToken);
        var parents = await requestParents(fileList);
    }
}

Problem:

Der Code führt die while-Schleife zu schnell aus, was zu einem führt Flut von Anfragen an die Google API.

Lösungsversuch:

Um dieses Problem zu beheben, wurde eine Schlaffunktion erstellt:

async function sleep(fn, par) {
    return await setTimeout(async function() {
        await fn(par);
    }, 3000, fn, par);
}

Allerdings Diese Funktion gibt die Anforderungsantwort nicht ordnungsgemäß zurück.

Richtig Implementierung:

Das Problem mit der Sleep-Funktion liegt im Fehlen eines von setTimeout zurückgegebenen Versprechens. Um dieses Problem zu lösen, kann eine versprochene Version erstellt werden:

function timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
async function sleep(fn, ...args) {
    await timeout(3000);
    return fn(...args);
}

Optimierte Schleife:

Um die Schleifenausführung zu verlangsamen, eine Schlaffunktion, die die gesamte Berechnung anhält ist nicht optimal. Ein besserer Ansatz ist die Verwendung eines Promise.all-Konstrukts, das die Sleep-Funktion enthält:

while (goOn) {
    var [parents] = await Promise.all([
        listFiles(nextPageToken).then(requestParents),
        timeout(5000)
    ]);
}

Diese Modifikation stellt sicher, dass die Berechnung der Eltern mindestens 5 Sekunden dauert, wodurch die Schleife effektiv verlangsamt und eine übermäßige API verhindert wird Anfragen.

Das obige ist der detaillierte Inhalt vonWie kann ich übermäßige API-Anfragen verhindern, wenn ich Async/Await in JavaScript verwende?. 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