import axios from 'axios';
const baseURL = 'https://api.example.com';
const CancelToken = axios.CancelToken;
let cancel;
const instance = axios.create({
baseURL,
});
instance.interceptors.request.use(
(config) => {
// 在发送请求之前检查是否需要取消之前的请求
if (cancel) {
cancel('Request canceled');
}
// 创建新的CancelToken
config.cancelToken = new CancelToken(function executor(c) {
cancel = c;
});
return config;
},
(error) => {
return Promise.reject(error);
}
);
instance.interceptors.response.use(
(response) => {
// 对响应数据做点什么
return response.data;
},
(error) => {
// 对响应错误做点什么
return Promise.reject(error);
}
);
export default instance;
我们在请求拦截器中创建了一个新的CancelToken,并且将cancel函数保存在变量cancel中。如果有新的请求发起时,会先调用cancel函数来取消之前的请求。