Saya mencoba menggunakan fitur async baru dan saya berharap menyelesaikan masalah saya akan membantu orang lain di masa depan. Ini adalah kode saya yang berfungsi:
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
});
}
Masalahnya adalah, bahwa loop sementara saya berjalan terlalu cepat dan script mengirim terlalu banyak permintaan per detik ke Google API. Oleh karena itu saya ingin membangun fungsi tidur yang menunda permintaan. Jadi saya juga bisa menggunakan fungsi ini untuk menunda permintaan lainnya. Jika ada cara lain untuk menunda permintaan, harap beri tahu saya.
Bagaimanapun, ini adalah kode baru saya yang tidak berfungsi. Respons permintaan dikembalikan ke fungsi async anonim dalam setTimeout, tetapi saya tidak tahu bagaimana saya bisa mengembalikan respons ke resp fungsi tidur. ke fungsi asyncGenerator awal.
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);
}
Saya sudah mencoba beberapa opsi: menyimpan respons dalam variabel global dan mengembalikannya dari fungsi tidur, panggilan balik dalam fungsi anonim, dll.
Promise.all
pendekatannya. Sangat sederhana dan elegan!