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!