私は新しい非同期機能を使用しようとしています。私の問題を解決することが将来的に他の人の役に立つことを願っています。これは機能している私のコードです:
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ループの実行速度が速すぎ、スクリプトが1秒あたりの送信リクエスト数が多すぎることです。そのため、リクエストを遅延させるスリープ機能を構築したいと思います。したがって、この関数を使用して他のリクエストを遅らせることもできます。リクエストを遅らせる別の方法がある場合は、お知らせください。
とにかく、これは動作しない私の新しいコードです。リクエストの応答は、setTimeout内の匿名非同期関数に返されますが、スリープ関数respに応答を返す方法がわかりません。最初の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
アプローチが大好きです。とてもシンプルでエレガント!