Heim >Web-Frontend >js-Tutorial >Wie kann die Rate von API-Anfragen mithilfe von Async/Await und setTimeout effektiv gesteuert werden?
Kombination der Async-Funktion Await setTimeout
In diesem Codeausschnitt versucht die asyncGenerator-Funktion, die async-await-Funktionen zum Verarbeiten einer Liste zu nutzen von Dateien aus der Google API. Allerdings wird die while-Schleife zu schnell ausgeführt, was zu übermäßig vielen API-Anfragen pro Sekunde führt. Um dieses Problem zu beheben, versucht der Entwickler, eine Schlaffunktion, listFiles, einzuführen, um die API-Anfragen zu verzögern.
Die Schlaffunktion soll die Ausführung der listFiles-Funktion um 3000 Millisekunden verzögern. Der Code funktioniert jedoch nicht wie vorgesehen. Das Problem liegt in der setTimeout-Funktion, die nativ kein Versprechen zurückgibt, das abgewartet werden kann.
Um dieses Problem zu beheben, ist es notwendig, die setTimeout-Funktion über die Timeout-Hilfsfunktion zu versprechen:
function timeout(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
Zusätzlich kann die Schlaffunktion geändert werden, um die Timeout-Hilfsfunktion zu verwenden:
async function sleep(fn, ...args) { await timeout(3000); return fn(...args); }
Alternativ: Um die While-Schleife zu verlangsamen, ohne eine Callback-basierte Sleep-Funktion zu verwenden, kann der folgende Ansatz verwendet werden:
while (goOn) { // other code var [parents] = await Promise.all([ listFiles(nextPageToken).then(requestParents), timeout(5000) ]); // other code }
Dieser Ansatz stellt sicher, dass die Berechnung der Eltern mindestens 5 Sekunden dauert, wodurch die Schleife effektiv verlangsamt wird .
Das obige ist der detaillierte Inhalt vonWie kann die Rate von API-Anfragen mithilfe von Async/Await und setTimeout effektiv gesteuert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!