Я намагаюся використовувати нові функції асинхронізації і сподіваюся, що вирішення моєї проблеми допоможе іншим у майбутньому. Це мій код, який працює:
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, але я просто не знаю, як я можу повернути відповідь на функцію сну відповідно. до початкової функції 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
підхід. Так просто і елегантно!