让axios在vue(2.x)中丝滑起来(基本封装/请求取消,重试, 挂起等)_ethan.Yin的博客-CSDN博客_axios请求挂起
具体内容请查看上方文章。
1、token过期重试的补充。接口请求的状态如果不是200,也就是说headers里面的Status Code不是200,那么会进入axios response的第二个回调error里。根据个人项目里的情况来决定是放在第一个回调里还是第二个回调里
let isRefreshing = false
let requests = []
// http response 拦截
instance.interceptors.response.use(async response => {
return response
}, async error => {
if (error.response && error.response.status === 401) {
if (!isRefreshing) {
isRefreshing = true
const res1 = await refreshToken()
if (res1.flag) { // 将config的url与baseUrl重新配置就可以具体配置取消哪个请求
// 为了确保当前过期请求可重新执行,改为微任务执行。
Promise.resolve().then(() => {
requests.forEach(cb => cb()) // 执行那些 刷新tokens时 被挂起的请求
requests = []
})
} else errorHandle(res1) // token刷新失败
isRefreshing = false
}
return new Promise(resolve => {
requests.push(() => { resolve(instance(error.response.config)) })
})
}
return Promise.reject(error)
})