導入前回の記事では、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管理チュートリアルグラフィック詳細説明
純粋な CSS を使用して、マウスが行の上を通過するときに行の背景色を変更し、その行にフォーカスがあ...
目次1. 最も単純な例2. 音声の速度とピッチをカスタマイズする3. 音量の調整方法4. よく使われ...
後悔を癒す薬は世の中にある、考えてみる気さえあれば!コンテナを再作成する必要はもうありません。 m2...
問題の説明: CSS アニメーション プロパティを使用すると、ループが最初に読み込まれたときに白いギ...
目次序文ターゲット最初のステップ:ステップ2:ステップ3:ステップ4:要約する序文現在主流のフレーム...
フレーム:スタイル=”border-style:solid;border-width:5px;bor...
tomcat サーバーの構成誰もが Web について学習するときに、自分のツール用に Tomcat ...
tomcat7 のデフォルトのプログラム公開パスは tomcat/webapps/ROOT/ です。...
PCIE には 4 つの異なる仕様があります。下の図でそのうちの 2 つを見てみましょう。マザーボー...
目次1. 画像1. 鏡とは何ですか? 2. 画像の構成と目的(1) Dockerファイル(2)スクラ...
最近ファイルシステムを作ったのですが、フィールドが多すぎることに気づきましたページングを使用した複数...
いろいろ苦労しましたが、やっと yum インストールの手順がわかりました。以前、バイナリ パッケージ...
みなさんこんにちは。私は梁旭です。ご存知のとおり、Linux ではデバイス ファイルも含めすべてがフ...
私はいつも、なぜMySQLデータベースのtimestampタイムゾーンの問題を無視できるのか疑問に思...
この記事では、ドラッグアンドドロップやクリックによる画像のアップロードを実現するためのVueの具体的...