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