Axios はリクエストをキャンセルし、重複リクエストを回避します

Axios はリクエストをキャンセルし、重複リクエストを回避します

起源

あるページではすべてのデータをダウンロードする必要があり、ダウンロードするデータの量が多く、インターフェースの遅延が長くなります...

あるページの初期データの読み込みには時間がかかりますが、1 回の検索は高速です。初期データの読み込み中は検索インターフェイスに戻り、その後の初期データの戻りで検索データの表示をカバーします。

このような状況では、次のことが必要です。

  • リクエストを手動でキャンセル/終了する機能。
  • 一部のページ インターフェイスでは、一度に 1 つのリクエストしか受け付けられません。

現状

このシステムは、Laoge Huakucha のオープンソース vue-element-admin をベースに二次開発したものです。リクエストは axios を使用しており、カプセル化された request.js のキーコードは次のとおりです。

// axiosインスタンスを作成する
constサービス = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = ベース URL + リクエスト URL
  withCredentials: true, // クロスドメインリクエスト時にCookieを送信する
  timeout: 500000, // リクエストタイムアウト
  変換リクエスト: [関数(データ) {
    // データに対して任意の変換を実行します return Qs.stringify({
      ...データ
    },
    // 配列変換 { arrayFormat: 'brackets' })
  }]
})

// リクエストインターセプター
サービスインターセプターリクエストの使用(
  設定 => {
    // リクエストが送信される前に何かを行う

    (store.getters.token)の場合{
      // 各リクエストにトークンを持たせる
      // ['X-Token']はカスタムヘッダーキーです
      // 実際の状況に応じて変更してください
      config.headers['token'] = getToken()
    }
    設定を返す
  },
  エラー => {
    // リクエストエラーに対して何かを行う
    console.log(error) // デバッグ用
    Promise.reject(error) を返します。
  }
)

リクエストを開始する方法:

エクスポート関数remoteApi(data) {
  リクエストを返す({
    URL: '/api',
    メソッド: 'post'、
    データ
  })
}

リクエストをキャンセル cancelToken

公式ドキュメント: キャンセル:

CancelToken は axios.CancelToken に置き換えられます。
const ソース = CancelToken.source();

axios.get('/user/12345', {
  キャンセルトークン: ソース.token
}).catch(関数(スロー) {
  もし(axios.isCancel(スロー)){
    console.log('リクエストがキャンセルされました', throwed.message);
  } それ以外 {
     // エラーを処理する }
});

axios.post('/user/12345', {
  名前: '新しい名前'
}, {
  キャンセルトークン: ソース.token
})

// リクエストをキャンセルします(メッセージパラメータはオプションです)
source.cancel('ユーザーによって操作がキャンセルされました。');

リクエスト方法の変更

エクスポート関数 remoteApi(data, cancelToken) {
  リクエストを返す({
    URL: '/api',
    メソッド: 'post'、
    キャンセルトークン、
    データ
  })
}

実際のリクエストを行うときは、cachelToken を作成します。

// コンポーネントメソッドで this.cancelToken = CancelToken.source()
remoreApi(データ、this.cancelToken)、then(....)、catch(....)、finally(....)

リクエストをキャンセルするには、次を実行します。

// コンポーネントメソッドで this.cancelToken.cancel('ダウンロードをキャンセル')

重複したリクエストを避ける

遅延の長いインターフェースの戻りデータが別のインターフェースの戻りデータを上書きしてデータ表示エラーが発生するのを防ぐため、インターフェースへの要求を繰り返し実行しないでください。アイデアは比較的シンプルで、グローバル マップを使用してリクエスト ID と対応する cancelTokens を保存します。リクエストを開始する前に、リクエスト識別子に応じて対応する cancelToken の cancel メソッドを呼び出し、条件を満たす新しいリクエストを発行します。

要約する

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

以下もご興味があるかもしれません:
  • Axios グローバル リクエスト パラメータ設定、リクエストおよびリターン インターセプター メソッド
  • Vue が Axios リクエストとインターセプターをカプセル化する手順
  • Vue axios 繰り返しクリックで最後のリクエストをキャンセルするカプセル化メソッド
  • Axios で繰り返して無駄なリクエストをキャンセルする方法
  • Axiosは繰り返しのリクエストをキャンセル
  • Vue axios インターセプターは、繰り返しリクエストのキャンセルによく使用されます。

<<:  MLSQLコンパイル時権限制御例の詳細な説明

>>:  MySQL 8.0.15 のインストールと設定方法のグラフィックチュートリアル

推薦する

JavaScriptカスタムオブジェクトメソッドの概要

目次1. オブジェクトを使用してオブジェクトを作成する2. コンストラクタを使用してオブジェクトを作...

Tomcat が設定ファイルを外部に配置するためのソリューション

質問通常の開発では、プロジェクトを Tomcat にデプロイする場合、プロジェクトを war パッケ...

MySQL の int、char、varchar のパフォーマンスを比較する

インターネットには、真実のように見える「噂」がたくさんあります。もちろん、悪意のあるものではありませ...

Zabbix で監視項目と集約されたグラフを設定するためのサンプルコード

1. ローカルマシンを監視するためにZabbixエージェントをインストールするエージェントソフトウェ...

docker-compose でデプロイしたときに MySQL にアクセスできなくなる問題の簡単な分析

Docker-ComposeとはCompose プロジェクトは、以前の fig プロジェクトから派生...

AngularとIonicのライフサイクルとフック関数を素早く理解するための記事

目次角度成し遂げる呼び出し順序知らせイオニックionic はページのライフサイクルをどのように処理し...

Linux jdk のインストールと環境変数の設定チュートリアル (jdk-8u144-linux-x64.tar.gz)

最初にsudo suコマンドを使用して root アカウントに切り替えることをお勧めします。そうしな...

バランスの取れたデジタルスクロール効果を実現するJavaScript

目次1. 実施の背景2. 実装のアイデア3. 実施プロセス1. 実施の背景先週、ユーザーがタスクを完...

フォームから Vue ElementUI を使用してログイン効果を実装する例

目次1. ElementUIで基本的なスタイルを構築する2. [送信]ボタンをクリックして、アカウン...

IE6 での PNG アルファ透明度 (完全コレクション)

IE6 は PNG の透明度をサポートしていないと多くの人が言っています。実際、IE は 100%...

Web ベースの電子メール コンテンツの HTML フォーマット標準の概要

1. ページ要件1) 標準のヘッダーとフッターを使用するXML/HTML コードコンテンツをクリップ...

Vue3 の SetUp 関数のプロパティとコンテキスト パラメータの詳細な説明

1. setUp関数の最初のパラメータpropsセットアップ(プロパティ、コンテキスト){}最初のパ...

初めてDockerイメージを構築、実行、公開、取得するための詳細な手順

1. はじめに以前は、Python アプリケーションの作成を開始したい場合、最初のステップはマシンに...

Javascript配列の重複排除のいくつかの方法の詳細な説明

目次アレイ重複排除1 2層forループ(バブルソートの2層ループ記述に類似) 2 ループとインデック...

Vue の計算プロパティの紹介

目次1. 計算プロパティとは何ですか? 2. 計算プロパティの構文3. 例1. 計算プロパティとは何...