導入前回の記事では、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管理チュートリアルグラフィック詳細説明
公式の MySQL イメージを使用するには、構成ファイル、DB データ ファイル ディレクトリなどの...
実際、この問題は、HTML の select タグを初めて学んだときにすでに発生していました。今日に...
現在、Web デザインではタブが広く使用されていますが、一般的に次の 2 つのタイプに分けられます。...
目次序文vue-i18nをインストールするロケールの設定getLangs.js の実装i18nインス...
1. 概要Redis Cluster は、Redis ノードのグループ間での高可用性とシャーディング...
閉鎖サービス nginx 停止systemctl 停止 nginx起動するサービス nginx 開始...
binlog は、MySQL のすべての DML 操作を記録するバイナリ ログ ファイルです。 bi...
目次1. ブラウザのクッキーの値を取得する2. RGBを16進数に変換する3. クリップボードにコピ...
mysql5.6.28のインストールと設定方法1. 基本的なシステム情報を確認し、yumでインストー...
序文私のように、Java バックエンドに勤勉な人であれば、多数のプロジェクト機能を実装することに加え...
目次1. Typescriptの紹介2. 設定ファイル webpack 設定3. プロジェクトに.t...
目次ブラウザのレンダリングメカニズムリフローと再塗装リフロー逆流を引き起こす行為:再描画再描画を引き...
序文システムをインストールしたときに、パーティション領域を適切に割り当てませんでした。その後のメンテ...
目次概要戦略パターンを使用しないフォーム検証戦略パターンを使用して最適化する戦略パターンの利点要約す...
Vueのコントロール商品数量コンポーネントのカプセル化と使用は参考までに。具体的な内容は以下のとお...