let isRefreshing = false;
let requests = [];
* 获取刷新token接口后,再逐一请求队列中的接口,直到清空请求
*/
service.interceptors.response.use(
async (response) => {
let expiration = getExpiration();
let timestamp = parseInt(new Date().getTime() / 1000);
if (expiration && expiration - 8 * 60 <= timestamp) {
if (!isRefreshing) {
isRefreshing = true;
return refreshToken()
.then((res) => {
const { token, expire } = res.data;
setToken(token);
setExpiration(expire);
response.headers.Authorization = `${token}`;
requests.forEach((cb) => cb(token));
requests = [];
return service(response.config);
})
.catch((err) => {
removeToken();
router.push("/login");
return Promise.reject(err);
})
.finally(() => {
isRefreshing = false;
});
}
}
},
(error) => {
}
);