Yeni eşzamansız özellikleri kullanmaya çalışıyorum ve umarım problemimi çözmek gelecekte başkalarına yardımcı olacaktır. Bu benim çalışan kod:
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
});
}
Sorun şu ki, while döngüm çok hızlı çalışıyor ve komut dosyası google API'sına saniyede çok fazla istek gönderiyor. Bu nedenle, talebi geciktiren bir uyku fonksiyonu oluşturmak istiyorum. Böylece bu işlevi diğer istekleri geciktirmek için de kullanabilirim. İsteği ertelemenin başka bir yolu varsa, lütfen bana bildirin.
Her neyse, bu benim yeni kod çalışmıyor. İsteğin yanıtı, setTimeout içinde anonim zaman uyumsuz işlevine döndürülür, ancak uyku işlevine verilen yanıtı nasıl döndürebileceğimi bilmiyorum. başlangıç asyncGenerator işlevine.
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);
}
Zaten bazı seçenekleri denedim: cevabı global bir değişkende saklamak ve uyku fonksiyonundan geri getirmek, anonim fonksiyon içinde geri arama yapmak vb.
Promise.all
Yaklaşımı seviyorum . Çok basit ve zarif!