重複リクエストを削除するAxiosのソリューションについての簡単な説明

重複リクエストを削除するAxiosのソリューションについての簡単な説明

このソリューションには2つの主な機能があります

1. リクエストが送信された後、後続の繰り返しリクエストはキャンセルされ、処理されず、最初のリクエストが完了するまで待機します。
2. ルートジャンプ後、前のページの未完了のリクエストはすべてクリアされます。

1. 重複したリクエストをキャンセルする

前提条件:

1. axiosが公式に提供しているキャンセル方法については、関連文書を参照してください:CancelToken
2.js マップ関連の概念
3. 安全なクエリ文字列解析および文字列分解ライブラリ qs。js に組み込まれた JSON に似ています。

パラメータ処理を簡素化するために、このソリューションでは POST リクエストのみを考慮します。つまり、メソッド、URL、データが同じ場合は重複リクエストと見なされます。

// アクシオス
const 保留中 = 新しい Map()
/**
 * リクエストを追加 * @param {Object} config
 **/
const addPending = (config) => {
  定数url = [
    config.method、
    config.url、
    qs.stringify(config.data)
  ]。参加する('&')
  if (pending.has(url)) { // 現在保留中のリクエストがある場合は、後続のリクエストをキャンセルします config.cancelToken = new axios.CancelToken(cancel => cancel(`重複したリクエストはアクティブにインターセプトされます: ${url}`))
  } else { // 現在のリクエストが保留中に存在しない場合は追加します config.cancelToken = config.cancelToken || new axios.CancelToken(cancel => {
      保留中.設定(url, キャンセル)
    })
  }
}
/**
 * リクエストを削除 * @param {Object} config
 */
const removePending = (config) => {
  定数url = [
    config.method、
    config.url.replace(config.baseURL, ''), // レスポンス URL にはドメイン名が追加されますが、リクエスト URL と一致するようにドメイン名を削除する必要があります。qs.stringify(JSON.parse(config.data)) // リクエスト パラメータ構造と一致する必要があります。リクエストはオブジェクトで、レスポンスは文字列です。].join('&')
  if (pending.has(url)) { // 現在のリクエスト識別子がpendingに存在する場合、現在のリクエストをキャンセルして削除します。pending.delete(url)
  }
}

/* axios グローバル リクエスト パラメータ設定、リクエスト インターセプター*/
axios.interceptors.request.use(
  設定 => {
    addPending(config) // 現在のリクエストを保留中の戻り設定に追加する
  },
  エラー => {
    Promise.reject(error) を返します。
  }
)
// レスポンスインターセプターは例外処理です axios.interceptors.response.use(
  レスポンス => {
    removePending(response.config) // リクエストが完了したら、このリクエストの返答を削除します
  },
  エラー => {
    if (err && err.config) {
      removePending(err.config) // リクエストが完了したら、このリクエストを削除します}
    Promise.resolve(err.response) を返します。
  }
)

2. すべてのリクエストをクリーンアップする

// アクシオス
/**
 * 保留中のリクエストをクリアする(ルーティングリダイレクト時に呼び出される)
 */
エクスポートconst clearPending = () => {
  for (const [url, cancel] of pending) {
    キャンセル(url)
  }
  保留中.クリア()
}
// ルータ.js
router.beforeEach((to, from, next) => {
  // ルートジャンプ、すべてのリクエストをクリア clearPending()
  })

Axios 重複排除リクエスト ソリューションに関するこの記事はこれで終わりです。Axios 重複排除リクエスト ソリューションの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • axios を使用してプロジェクト内の複数の繰り返しリクエストをフィルタリングする方法
  • Axios はリクエストをキャンセルし、重複リクエストを回避します
  • Axiosは繰り返しのリクエストをキャンセル
  • Axios で繰り返して無駄なリクエストをキャンセルする方法
  • Vue axios 繰り返しクリックで最後のリクエストをキャンセルするカプセル化メソッド

<<:  MySQL データベースで機密データの暗号化と復号化を実装する方法

>>:  Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法

推薦する

Linux におけるシステム入出力管理の詳細な説明

システムの入力と出力の管理1. システムの入力と出力を理解するLinuxシステムでは、1は正しい出力...

最新の高品質な英語無料フォント36個を公開

01. 無限フォントのダウンロード02. バンダフォントのダウンロード03. ロールアップフォントの...

ウェブカラーのコントラストと調和のテクニックの共有

色のコントラストと調和対照的な状況では、色の相互作用は単一の色によって与えられる感覚とは異なります。...

React Hooks に基づく小さな状態管理の詳細な説明

目次React Hooks に基づく状態共有の実装ユーザーエクスペリエンスこの記事では、主に Rea...

HTMLページ作成に関する私の経験の簡単な要約

Word of Mouth に入社して 3 ~ 4 か月が経ちました。仕事の中で一番の収穫は、ビジュ...

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明

JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明最近、...

JS 手ぶれ補正機能の実装と使用シナリオ

目次1. 手ぶれ補正機能とは何ですか? 1. なぜ手ぶれ補正機能が必要なのでしょうか? 2. 手ぶれ...

SSH ポート転送、ローカル ポート転送、リモート ポート転送、動的ポート転送の詳細

パート 1 SSH ポート転送の概要カフェで無料Wi-Fiを利用しているとき、誰かがあなたのパスワー...

Vueはツリー構造の追加、削除、変更、チェックのサンプルコードを実装します

実は多くの会社がユーザー権限ツリーに似た機能を持っています。最近、追加、削除、修正のツリー構造を書き...

Vueのプラグインの仕組みとインストールの詳細を深く理解する

序文: Vue を使用する場合、多くの場合、カスタム プラグインをいくつか使用して記述し、 Vue....

MySQLクエリが遅い場合の理由と解決策

Python プログラムを書き、Mysql ライブラリを集中的に操作したためです。データ量が多くない...

Dockerコンテナのログ分析

コンテナログを表示するまず、 docker run -it --rm -d -p 80:80 ngi...

MycliはMySQLコマンドライン愛好家にとって必須のツールです

マイクリMyCLI は、自動補完と構文の強調表示を備えた MySQL、MariaDB、および Per...

MySQL トリガーの原理と使用例の分析

この記事では、例を使用して、MySQL トリガーの原理と使用方法を説明します。ご参考までに、詳細は以...

グリッドはページのレイアウトプランです

<br /> 英語原文: http://desktoppub.about.com/od/...