const { default: axios } = require("axios")
const qs = require('qs')
function regsoleKey(config) {
const { method, url, params, data } = config;
return [method, url, qs.stringify(params), qs.stringify(data)].join('&')
}
const reqQueue = new Map();
function addreqQueue(config){
//调用生成唯一标识值函数, 生成 requestKey
const requestKey = regsoleKey(config);
//为每个请求创建一个专属的 CancelToken(用于取消请求)
config.cancelToken = config.cancelToken || new axios.CancelToken((cancel)=>{
// 判断 reqQueue 中是否含有 requestKey,
// 将 requestKey 与 CancelToken 以键值对的形式保存到map对象中
if(!reqQueue.has(requestKey)){
reqQueue.set(requestKey,cancel)
}
});
}
function removereqQueue(config){
// 标识值
const requestKey = generateReqKey(config);
if(reqQueue.has(requestKey)){
// 取消之前发出请求
const cancelToken = reqQueue.get(requestKey);
cancelToken(requestKey);
// 从队列移除
reqQueue.delete(requestKey);
}
}
serviceAxios.interceptors.request.use(
function(config) {
removereqQueue(config); // 检查是否重复发送请求
addreqQueue(config); //将本次请求加入请求队列
return config
},
(error) => {
return Promise.reject(error)
}
)
serviceAxios.interceptors.request.use(
function(config) {
removereqQueue(config); // 检查是否重复发送请求
addreqQueue(config); //将本次请求加入请求队列
return config
},
(error) => {
return Promise.reject(error)
}
)