Async 関数 Await setTimeout の組み合わせ
このコード スニペットでは、asyncGenerator 関数は async-await 機能を利用してリストを処理しようとします。 Google API からのファイルの数。ただし、while ループの実行が速すぎるため、1 秒あたりの API リクエストが過剰になります。これに対処するために、開発者は API リクエストを遅延させるスリープ関数 listFiles を導入しようとしました。
スリープ関数は、listFiles 関数の実行を 3000 ミリ秒遅らせるように設計されています。ただし、コードは意図したとおりに機能しません。問題は setTimeout 関数にあり、この関数は待機できる Promise をネイティブに返しません。
この問題を解決するには、タイムアウト ヘルパー関数を介して setTimeout 関数を Promise する必要があります。
function timeout(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
さらに、タイムアウト ヘルパーを使用するようにスリープ関数を変更できます。 function:
async function sleep(fn, ...args) { await timeout(3000); return fn(...args); }
あるいは、コールバックベースのスリープ関数を使用せずに while ループを遅くするには、次のアプローチを使用できます。
while (goOn) { // other code var [parents] = await Promise.all([ listFiles(nextPageToken).then(requestParents), timeout(5000) ]); // other code }
このアプローチでは、計算が親の処理には少なくとも 5 秒かかり、事実上ループが遅くなります。
以上がAsync/Await と setTimeout を使用して API リクエストのレートを効果的に制御するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。