如果是react项目,推荐ahooks
如果是vue项目,推荐ahooks-vue
但如果用的是纯axios, 想要取消请求的话,可以这样
javascript
request.js
// 存放请求的key和取消请求的方法
const reqMap = new Map()
// 创建实例
const instance = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 1000,
headers: {'X-Custom-Header': 'foobar'}
});
// 根据路劲和请求方式生成请求的key
const getReqKey = (config) => {
let { url, method } = config;
return [url, method].join("&");
}
// 删除方法
const delRepeatReq = (config) => {
const reqKey= getReqKey(config);
// 如果存在第一次请求的key
if (reqMap.has(reqKey)) {
const cancelToken = reqMap.get(reqKey);
cancelToken(reqKey);
reqMap.delete(reqKey);
}
}
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
// 执行删除重复请求
delRepeatReq(config)
// 得到key
const reqKey= getReqKey(config);
// 将key和cancel 存放到map
config.cancelToken = new Axios.CancelToken((cancel) => {
if (!reqMap.has(reqKey)) {
// 第一次请求存放key
reqMap.set(reqKey, cancel);
}
});
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});