ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で Async/Await を使用するときに過剰な API リクエストを防ぐにはどうすればよいですか?

JavaScript で Async/Await を使用するときに過剰な API リクエストを防ぐにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-15 12:34:11
オリジナル
373 人が閲覧しました

How Can I Prevent Excessive API Requests When Using Async/Await in JavaScript?

非同期関数、Await、setTimeout の組み合わせ

このガイドでは、最新の JavaScript 非同期機能を利用して、一般的なパフォーマンスの問題の解決策を提供します。短期間に過剰なリクエストを Google API に送信する。目標は、スリープ関数を導入してリクエストを遅延させ、スクリプトのパフォーマンスを向上させることです。

元のコード:

この最初のコードは、非同期/待機パターンを効率的に採用しています:

async function asyncGenerator() {
    while (goOn) {
        var fileList = await listFiles(nextPageToken);
        var parents = await requestParents(fileList);
    }
}
ログイン後にコピー

問題:

コードが実行されるwhile ループが速すぎるため、Google API へのリクエストが大量に発生しました。

試行された解決策:

これに対処するために、スリープ関数が作成されました:

async function sleep(fn, par) {
    return await setTimeout(async function() {
        await fn(par);
    }, 3000, fn, par);
}
ログイン後にコピー

ただし、この関数はリクエストの応答を返すことができません。

正しい実装:

スリープ関数の問題は、setTimeout によって返される Promise が欠如していることにあります。これを解決するには、約束されたバージョンを作成できます:

function timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
async function sleep(fn, ...args) {
    await timeout(3000);
    return fn(...args);
}
ログイン後にコピー

最適化ループ:

ループの実行を遅くするために、計算全体を一時停止するスリープ関数最適ではありません。より良いアプローチは、sleep 関数を含む Promise.all 構造を使用することです:

while (goOn) {
    var [parents] = await Promise.all([
        listFiles(nextPageToken).then(requestParents),
        timeout(5000)
    ]);
}
ログイン後にコピー

この変更により、親の計算に最低 5 秒かかることが保証され、効果的にループが遅くなり、過剰な API が防止されます。リクエスト。

以上がJavaScript で Async/Await を使用するときに過剰な API リクエストを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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