From 1c8e1a93605aba50f846e2e6c75ce38ea971d8ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E9=94=8B=E6=9D=B0?= Date: Mon, 8 Jul 2024 10:22:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=8A=82=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/http.ts | 46 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/src/utils/http.ts b/src/utils/http.ts index 046fe7b9a..3e8afd78b 100644 --- a/src/utils/http.ts +++ b/src/utils/http.ts @@ -6,6 +6,9 @@ import { getToken } from '@/utils/auth' import 'nprogress/nprogress.css' import router from '@/router' +// 节流时间 +const throttleTime = 500; + NProgress.configure({ showSpinner: false }) // NProgress Configuration interface ICodeMessage { @@ -52,6 +55,37 @@ http.interceptors.request.use( } ) +// 节流处理 +const abortControllerMap: Map = new Map() +const throttleMap = new Map() +http.interceptors.request.use((config: AxiosRequestConfig) => { + const controller = new AbortController() + const url = config.url || "" + config.signal = controller.signal + abortControllerMap.set(url, controller) + const nowTime = new Date().getTime() + let dataString = config.data + ? Object.entries(config.data) + .map(([key, value]) => `${key}=${value}`) + .join("&") + : "" + let paramString = config.params + ? Object.entries(config.params) + .map(([key, value]) => `${key}=${value}`) + .join("&") + : "" + let uniqueCode = `${config.url};${config.method};${dataString};${paramString};` + if (throttleMap.get(uniqueCode)) { + if ( + nowTime - throttleMap.get(uniqueCode) < throttleTime + ) { + return Promise.reject(new Error("throttle")) + } + } + throttleMap.set(uniqueCode, nowTime) + return config +}) + // 响应拦截器 http.interceptors.response.use( (response: AxiosResponse) => { @@ -81,11 +115,13 @@ http.interceptors.response.use( return response }, (error) => { - NProgress.done() - Message.clear() - const response = Object.assign({}, error.response) - response && Message.error(StatusCodeMessage[response.status] || '系统异常, 请检查网络或联系管理员!') - return Promise.reject(error) + if (error.message !== "throttle") { + NProgress.done() + Message.clear() + const response = Object.assign({}, error.response) + response && Message.error(StatusCodeMessage[response.status] || '系统异常, 请检查网络或联系管理员!') + return Promise.reject(error) + } } )