因為再開發中遇見一個問題,前端發起一個請求之後,服務端很久沒響應,然後前端又重新發起了
其實很簡單
如果是fetch
let controller = null
controller && controller.abort() // 取消請求
controller = new AbortController()
const data = fetch('https://xxxxx',{
signal: controller.signal // 重點
})
如果是axios
當然還有另外一個方式 CancelToken,但是我不會
import axios from 'axios';
let reqMap = new Map()
// 創建axios實例
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // api的base_url
timeout: 5000 // 請求超時時間
});
// 請求攔截器
service.interceptors.request.use(
config => {
let oldControl = reqMap.get(config.url)
oldControl && oldControl.abort() // 取消請求
const controller = new AbortController()
config.signal = controller.signal
reqMap.set(config.url,config)
return config;
},
error => {
console.log(error); // for debug
Promise.reject(error);
}
);
// 響應攔截器
service.interceptors.response.use(
response => {
reqMap.delete(response.config.url)
return response;
},
error => {
console.log('err' + error); // for debug
return Promise.reject(error);
}
);
export default service