ホームページ > ウェブフロントエンド > jsチュートリアル > Async/Await と setTimeout を使用して API リクエストのレートを効果的に制御するにはどうすればよいですか?

Async/Await と setTimeout を使用して API リクエストのレートを効果的に制御するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-27 17:38:11
オリジナル
549 人が閲覧しました

How to Effectively Control the Rate of API Requests Using Async/Await and setTimeout?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート