導入前回の記事では、axios のシンプルなカプセル化と、axios インターセプターの適用シナリオと方法について紹介しました。今日は、応答時間が長すぎたり、リクエスト数が多すぎたりする状況をインターセプターがどのように処理するかを見てみましょう。 リクエストをキャンセルする方法
公式サイトの例1: 次のように、CancelToken.sourceファクトリーメソッドを使用してキャンセルトークンを作成します。 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('ユーザーによって操作がキャンセルされました。'); 公式サイトの例 2: executor 関数を CancelToken コンストラクターに渡してキャンセル トークンを作成します。 CancelToken は axios.CancelToken に置き換えられます。 キャンセルする; axios.get('/user/12345', { キャンセルトークン: 新しいキャンセルトークン(関数executor(c) { // 実行関数はキャンセル関数をパラメータとして受け取ります cancel = c; }) }); // リクエストをキャンセルする キャンセル(); 上記のキャンセルトークンはすべて1回のリクエストで作成されていることがわかります。実際の作業では、すべてのリクエストを処理する必要があります。次に、インターセプターでリクエストをキャンセルする機能を実装する方法を見てみましょう。 インターセプター内の重複リクエストをキャンセルする'axios' から axios をインポートします './config' から baseURL をインポートします。 'qs' から qs をインポートします const pendingRequest = new Map(); // リクエストオブジェクト const CancelToken = axios.CancelToken; axios.defaults.timeout = 30000 axios.defaults.baseURL = ベースURL.target // リクエストインターセプターを追加 axios.interceptors.request.use(function(config) { // リクエストを送信する前に何かを行う config.headers = { 'コンテンツタイプ': 'application/json', 'トークン': getToken() } // リクエストキーを取得する requestKey = getReqKey(config); を設定します。 // 繰り返しリクエストかどうかを判断します if (pendingRequest.has(requestKey)) { // 繰り返しリクエストです removeReqKey(requestKey); // キャンセル }else{ // キャンセルトークンを設定する config.cancelToken = 新しいCancelToken(関数executor(cancel) { pendingRequest.set(requestKey, cancel); // 設定 }) } 設定を返します。 }, 関数 (エラー) { // リクエストエラー return Promise.reject(error); }); // レスポンスインターセプターを追加する axios.interceptors.response.use(function (response) { // リクエストオブジェクト内の requestKey を削除します requestKey = getReqKey(response.config); を設定します。 リクエストキーを削除します。 // 返されたデータを使って、ステータスをインターセプトするなどの処理を実行します。if (response.data.status !== 200) { トースト({ メッセージ: response.data.message、 タイプ: '警告'、 期間: 1000 }) 戻る } // 問題ありません。サーバーのデータを返します。 return response.data; }, 関数 (エラー) { requestKey = getReqKey(error.config); を設定します。 リクエストキーを削除します。 // レスポンスエラー return Promise.reject(error); }); // リクエストキーを取得する 関数 getReqKey(config) { // リクエストメソッド、リクエストアドレス、リクエストパラメータによって生成された文字列は、リクエストを繰り返すかどうかの基準として使用されます。const { method, url, params, data } = config; // これらのパラメータを分解します // GET ---> params POST ---> data const requestKey = [メソッド、URL、qs.stringify(params)、qs.stringify(data)].join('&'); requestKeyを返します。 } // 重複したリクエストをキャンセルする function removeReqKey(key) { const cancelToken = pendingRequest.get(キー); cancelToken(key); // 以前に送信したリクエストをキャンセルします pendingRequest.delete(key); // リクエストオブジェクト内の requestKey を削除します } 結論上記は繰り返しリクエストの処理です。インターセプターについてよくわからない場合は、前回の記事を読んでください。ご不明な点がございましたら、ご指摘いただければ幸いです。できるだけ早く更新します。 これで、vue axios インターセプターの一般的な繰り返しリクエストのキャンセルに関するこの記事は終了です。axios インターセプターの繰り返しリクエストのキャンセルに関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Alibaba Cloud ECSインスタンスのユーザールートパスワードとリモート接続方法を設定する方法
>>: MySQL 8.0.20 Window10無料インストール版設定とNavicat管理チュートリアルグラフィック詳細説明
属性値の正規一致セレクターには 3 つの種類があります。 [属性^="値"] [...
まずは投稿する前に! 「I Want to Study on My Own!」に改めて感謝します。た...
この記事では、ログインスライダー検証を実装するためのJavaScriptの具体的なコードを参考までに...
今日は、さまざまなブラウザでのデフォルト要素のマージン値が何であるかという問題について説明しました。...
この記事では、参考までに、簡単な計算機を実装するためのJavaScriptの具体的なコードを紹介しま...
目次概要最初のステップステップ2なぜ別の _data が必要なのでしょうか?データにもう少しデータを...
Docker の作成Docker Compose は、管理対象コンテナをプロジェクト、サービス、コン...
最近、Vue プロジェクトについて知り、ElementUI でデータを xlsx および Excel...
TabIndex は、Tab キーを押して、定義された TabIndex 要素を順番に取得し、各要素...
まず、コマンドラインまたはワークベンチを使用して MySQL にログインできず、「ユーザー '...
通常は、最初に Dockerfile ファイルを定義し、次に docker build コマンドを使...
序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...
WeChat ミニプログラム - QR コード ジェネレーターダウンロード: weapp-qrcod...
プルーンこのコマンドを使用するには、クライアントとデーモンの両方の API バージョンが少なくとも ...
1. 現在、Pythonのバージョン管理ツールは数多く存在します。その中でも比較的使いやすいのがPy...