このソリューションには2つの主な機能があります 1. リクエストが送信された後、後続の繰り返しリクエストはキャンセルされ、処理されず、最初のリクエストが完了するまで待機します。 1. 重複したリクエストをキャンセルする前提条件: 1. axiosが公式に提供しているキャンセル方法については、関連文書を参照してください:CancelToken パラメータ処理を簡素化するために、このソリューションでは 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL データベースで機密データの暗号化と復号化を実装する方法
>>: Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法
目次1. パラダイム基盤1.1 パラダイムの概念2. 3つの主要なパラダイム2.1 3つの主要なパラ...
実行プロセスを分析します。マウスをノードに移動して、ノードにツールチップ実装を開くための識別子 (...
ナビゲーションなどは日々の開発でよく使うので、記録として記事を書きます。ナビゲーションは終了/開始位...
しばらくサーバーいじってなかったけど、やることがなくなったのでモバイルワークスに行って海外サーバーを...
今日も私のページが文字化けしていたので、インターネットで関連する問題を検索しました。この方法はかなり...
赤い封筒の揺れ効果を実現するには要件があります。これまでやったことがないので、記録しておきます。ヘヘ...
MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...
負荷分散の概要Nginx の負荷分散実装を紹介する前に、負荷分散の分類について簡単に説明します。負荷...
目次概要フロントエンド知識システムフロントエンドの3つの要素プレゼンテーション層 (CSS)動作レイ...
内容Hyperledger fabric1.4環境のWindows 10でのセットアップ前提条件Wi...
「アダプティブ Web デザイン」はどのように機能しますか?実はそれほど難しいことではありません。 ...
質問docker run コマンドを使用して、tomcat コンテナが正常に追加されました。ポートも...
スタイルシートCSS (カスケーディング スタイル シート) は、HTML Web ページを美しくす...
目次方法1: 水平スクロールバーを設定する最も簡単な方法方法2(新規):ドラッグバーを追加して外側の...
停止したすべてのDockerコンテナを1つのコマンドで再起動するdocker ps -a | gre...