|
@@ -8,20 +8,42 @@ const request = axios.create({
|
|
|
|
|
|
})
|
|
|
|
|
|
-let requestList=new Set()
|
|
|
+// 对于重复的post请求,只处理第一次请求,后续重复的请求在上一次返回之前都取消
|
|
|
+const postRequestList=new Set()
|
|
|
+
|
|
|
+
|
|
|
+// 需要储存每次请求对应的取消方法
|
|
|
+let lastGetRequestList=new Map()
|
|
|
+// 取消方法
|
|
|
+const removePreRequest=(Url,fun)=>{
|
|
|
+ console.log(lastGetRequestList);
|
|
|
+ if(lastGetRequestList.has(Url)){
|
|
|
+ // 取消上一次请求
|
|
|
+ lastGetRequestList.get(Url)(`${Url}---重复请求被中断`)
|
|
|
+ // 设置 新的取消方法
|
|
|
+ lastGetRequestList.set(Url,fun)
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
request.interceptors.request.use(
|
|
|
config=>{
|
|
|
- // console.log(config);
|
|
|
config.headers['Authorization'] = localStorage.getItem('fsms_token') || ''
|
|
|
// 不处理get请求
|
|
|
if (config.method !== 'get') {
|
|
|
// 利用axios cancelToken 先取消请求
|
|
|
config.cancelToken = new axios.CancelToken(e => {
|
|
|
- // console.log(e, config, 'CancelToken')
|
|
|
// 在这里取消重复请求,上个请求未完成时,相同的请求不会再次执行
|
|
|
- requestList.has(`${config.url}`) ? e(`${config.url}---重复请求被中断`) : requestList.add(`${config.url}`)
|
|
|
+ postRequestList.has(config.url) ? e(`${config.url}---重复请求被中断`) : postRequestList.add(config.url)
|
|
|
})
|
|
|
+ }else if(config.params?.takeLastRequestResult){
|
|
|
+ // 对于get请求中的参数有 takeLastRequestResult 且值为真 进行特殊处理,若重名 请不要更改这个名字
|
|
|
+ config.cancelToken = new axios.CancelToken((c)=>{
|
|
|
+ lastGetRequestList.has(config.url) ? removePreRequest(config.url,c) : lastGetRequestList.set(config.url,c)
|
|
|
+ });
|
|
|
+ // 去除参数中的 takeLastRequestResult
|
|
|
+ if(config.params){
|
|
|
+ config.params.takeLastRequestResult=undefined
|
|
|
+ }
|
|
|
}
|
|
|
return config
|
|
|
},
|
|
@@ -33,7 +55,8 @@ request.interceptors.request.use(
|
|
|
|
|
|
request.interceptors.response.use(
|
|
|
res=>{
|
|
|
- requestList.delete(`${res.config.url}`)
|
|
|
+ postRequestList.delete(`${res.config.url}`)
|
|
|
+ lastGetRequestList.delete(`${res.config.url}`)
|
|
|
if(res.request.responseType==='blob' || res.request.responseType==='Blob'){
|
|
|
// 字节流
|
|
|
if(res.status === 200){
|
|
@@ -64,10 +87,13 @@ request.interceptors.response.use(
|
|
|
}
|
|
|
},
|
|
|
err=>{
|
|
|
- requestList.clear()
|
|
|
const {message} = err
|
|
|
console.log(message,'--错误信息');
|
|
|
if(!err.__CANCEL__){
|
|
|
+ // 清除
|
|
|
+ postRequestList.clear()
|
|
|
+ lastGetRequestList.clear()
|
|
|
+
|
|
|
// 多次点击由CancelToken取消的请求不给错误提示
|
|
|
ElMessage({
|
|
|
message: message || '网络异常',
|