js は axios 制限リクエスト キューを実装します

js は axios 制限リクエスト キューを実装します

背景は次のとおりです。

実際の開発では、ネットワークの問題や大量のクエリが発生し、前のリクエストが完了する前にユーザーが次のリクエストを開始する場合があります。

何が起こるでしょうか?

ただし、同じリクエストを複数回サーバーに送信すると、サーバーに負担がかかることは間違いないため、サーバーのクエリ速度を最適化した上で、ユーザーのネットワーク状況が悪い場合は、フロントエンドでリクエストを制限する必要があります。

axios に付属する cancelToken は、この要件を満たすのに役立ち、リクエスト情報を戻り値とするコールバック関数である既製の API axios.CancelToken を提供します。キャンセルする必要があるときに、このコールバック関数を実行できます。具体的な実装は以下のとおりです。

const サービス = axios.create({});
const 保留マップ = 新しい Map();
const addPendding = (config) => {
 config.cancelToken = config.cancelToken || 新しい axios.CancelToken(cancel => {
  (!penddingMap.has(config.url))の場合{
   保留中のマップを設定します(config.url,cancel);
  }
 })
}

const removePendding = (config) => {
 (保留中のマップがconfig.urlを持っている場合){
  キャンセル = penddingMap.get(config.url);
    キャンセル(config.url);
    保留中のマップを削除します(config.url)
 }
}

各リクエスト情報を格納するために、マップがローカルで維持されます。addPendding では、まず cancelToken があるかどうかが判断されます。ある場合は、cancelToken を再作成する必要はありません。 removePenddingでは、リクエスト情報がMap内にあるかどうかを判定します。リクエストがMap内に存在する場合は、cancel関数が実行され、Map内のリクエストが削除されます。

インターセプターにおける具体的な用途:

service.interceptors.request.use(config => {
 removePending(config) // マップ内に存在する場合は、まずリクエストをキャンセルします。addPending(config) // リクエストをマップに追加します。return config
})

service.interceptors.response.use(レスポンス => {
 ``` // コード
  応答データを返す
}, エラー => {
 // キャンセル要求をキャプチャし、if(error instanceof Cancel){ をスローします。
    error.message = '前のリクエストはまだ終了していません。お待ちください~';
    メッセージ.エラー(エラー.メッセージ);
    Promise.reject(error.response) を返します。 
  // ここでの throw に注意してください。リクエスト時に try-catch を呼び出してそれをキャプチャします})
)

ここで傍受が成功すると、トラフィック量の多い複数のリクエストを制限できます。

これは単なる例です。ボタンのロジックを判断することで、ユーザーがリクエストを開始するかどうかを制御することもできます。

これで、js による axios 制限リクエスト キューの実装に関するこの記事は終了です。js axios 制限リクエスト キューの関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript で Promise を使用して同時リクエスト数を制御する方法
  • リクエスト数を制限するために Ajax 同時リクエストを実装するために js を使用するサンプル コード
  • gin 投稿リクエストのJSON本文を取得する
  • JSはリクエストディスパッチャーを実装する
  • PHPはChromeフォームのリクエストデータをインターフェースで使用されるJSONデータに変換する機能を実装します。
  • JavaScript 中断要求に対するいくつかの解決策の詳細な説明

<<:  MySQL における「:=」と「=」の違いの簡単な分析

>>:  Docker-compose を使用して ELK クラスターを構築する方法

ブログ    

推薦する

ポータルサイト再設計のユーザーエクスペリエンス

<br />2006年10月12日のNetEaseの新ホームページの公開から、2008年...

バッチモードでtopコマンドを実行する方法

top コマンドは、Linux システムのパフォーマンスを監視するために誰もが使用している最適なコマ...

ブラウザタブの左端に表示されるウェブサイトのアイコンを設定します

この文の目的は何ですか?コードをコピーコードは次のとおりです。 <link rel="...

Vue カプセル化に基づくプルダウン更新およびプルアップ読み込みコンポーネント

VueとネイティブJavaScriptカプセル化に基づいて、プルダウンリフレッシュとプルアップロード...

Linux システム (Centos6.5 以上) のインストール JDK チュートリアル分析

記事の構成1. 準備2. Java JDK8.0をインストールする3. 環境変数を設定する3. イン...

階段効果を実現するためのWeChatアプレットカスタムメニューナビゲーション

設計意図ページを開発する際には、ページ上のナビゲーション メニューをクリックしたときにページを対応す...

MySQL 5.7.18 マスタースレーブレプリケーション設定(マスター 1 台とスレーブ 1 台)チュートリアルの詳細な説明

1. 複製原理マスター サーバーはバイナリ ログ ファイルに更新を書き込み、ログのローテーションを追...

Ubuntu 20.04 LTSの詳細なインストール履歴

この記事では、USB ブート ディスクの作成とシステムのインストールについて説明します。システム構成...

MySQL 8.0.13 解凍版のインストールと設定方法のグラフィックチュートリアル

1. インストール1. MySQLをダウンロードするダウンロードアドレス: リンクアドレスブラウザで...

N キロメートル以内のデータを検索する MySQL の簡単な例

地球の円周率と半径、検索ポイントの経度と緯度から、検索ポイントと検索データテーブル間の距離はNキロメ...

DockerはGitを使用してJenkinsのリリースとテストプロジェクトの詳細なプロセスを実装します

目次1. Dockerをインストールする2. カスタムネットワークアドレスを作成する3. Docke...

HTML ブロックレベルタグとインラインタグの違い

1. ブロックレベル要素: 独立して存在できる能力を指します。通常、ブロックレベル要素は改行によって...

CentOS8でのnmcliの使い方の詳しい説明

RHEL8/CentOS8 に基づく一般的な nmcli コマンド # IP を表示する (ifco...

MySQL 分離列とプレフィックスインデックスの使用の概要

目次データ列を分離するプレフィックスインデックスとインデックスの選択性データ列を分離するMySQL ...

CentOSはローカルyumソース/Alibaba Cloud yumソース/163yuanソースを設定し、yumソースの優先順位を設定します。

1. Centosイメージを使用してローカルのyumソースをビルドするCentOS をインストール...