Я пытаюсь использовать новые функции async для ES7, и я надеюсь, что решение моей проблемы поможет другим в будущем. Это мой код, который работает:Комбинация функции async + wait + setTimeout
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
});
}
Проблема заключается в том, что мой в то время как цикл выполняется слишком быстро, и скрипт отправляет слишком много запросов в секунду к 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);
}
Я уже пробовал несколько вариантов: хранение ответа в глобальной переменной и вернуть его из функции сна, обратный вызов в анонимной функции и т.д.
Любите подход 'Promise.all'. Так просто и элегантно! –
Что означает обозначение 'var [parents]'? Я не видел этого раньше, и это сложно для google – natedog
@NateUsher Это [destructuring] массива (https: // stackoverflow.com/q/3986348/1048572) – Bergi