Ich versuche, die neuen asynchronen Funktionen zu verwenden, und hoffe, dass die Lösung meines Problems in Zukunft anderen helfen wird. Dies ist mein Code, der funktioniert:
async function asyncGenerator() {
// other code
while (goOn) {
// other code
var fileList = await listFiles(nextPageToken);
var parents = await requestParents(fileList);
// other code
}
// other code
}
function listFiles(token) {
return gapi.client.drive.files.list({
'maxResults': sizeResults,
'pageToken': token,
'q': query
});
}
Das Problem ist, dass meine while-Schleife zu schnell ausgeführt wird und das Skript zu viele Anforderungen pro Sekunde an die Google-API sendet. Daher möchte ich eine Sleep-Funktion erstellen, die die Anfrage verzögert. Somit könnte ich diese Funktion auch verwenden, um andere Anfragen zu verzögern. Wenn es eine andere Möglichkeit gibt, die Anfrage zu verzögern, lassen Sie es mich bitte wissen.
Auf jeden Fall ist dies mein neuer Code, der nicht funktioniert. Die Antwort der Anfrage wird an die anonyme asynchrone Funktion innerhalb von setTimeout zurückgegeben, aber ich weiß einfach nicht, wie ich die Antwort an die Sleep-Funktion bzw. die Sleep-Funktion zurückgeben kann. zur anfänglichen asyncGenerator-Funktion.
async function asyncGenerator() {
// other code
while (goOn) {
// other code
var fileList = await sleep(listFiles, nextPageToken);
var parents = await requestParents(fileList);
// other code
}
// other code
}
function listFiles(token) {
return gapi.client.drive.files.list({
'maxResults': sizeResults,
'pageToken': token,
'q': query
});
}
async function sleep(fn, par) {
return await setTimeout(async function() {
await fn(par);
}, 3000, fn, par);
}
Ich habe bereits einige Optionen ausprobiert: Speichern der Antwort in einer globalen Variablen und Zurückgeben von der Sleep-Funktion, Rückruf innerhalb der anonymen Funktion usw.
Promise.all
Ansatz. So einfach und elegant!