Я пытаюсь использовать новые асинхронные функции и надеюсь, что решение моей проблемы поможет другим в будущем. Это мой код, который работает:
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
});
}
Проблема в том, что мой цикл while работает слишком быстро и скрипт отправляет слишком много запросов в секунду в Google API. Поэтому я хотел бы построить функцию сна, которая задерживает запрос. Таким образом, я мог бы также использовать эту функцию для задержки других запросов. Если есть другой способ задержать запрос, пожалуйста, дайте мне знать.
Во всяком случае, это мой новый код, который не работает. Ответ на запрос возвращается анонимной асинхронной функции в пределах setTimeout, но я просто не знаю, как я могу вернуть ответ на функцию сна, соответственно. к начальной функции asyncGenerator.
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);
}
Я уже попробовал некоторые варианты: сохранение ответа в глобальной переменной и возврат его из функции сна, обратный вызов в анонимной функции и т. Д.
Promise.all
подход. Так просто и элегантно!