react使用axios当刷新token后重新请求接口,页面不会刷新。怎么处理?
时间: 2024-02-21 19:02:23 浏览: 137
在React中使用Axios的过程中,如果要刷新Token并重新请求接口,可以采用以下两种方式:
1.使用拦截器:Axios提供了interceptors拦截器,可以在请求或响应被处理前对它们进行全局的拦截和处理。可以在请求拦截器中判断Token是否过期,如果过期,则先刷新Token,然后再重新发起请求。示例代码如下:
```
axios.interceptors.request.use(
(config) => {
const token = localStorage.getItem("token");
if (token) {
// 判断Token是否过期,如果过期则刷新Token
const decodedToken = jwt_decode(token);
const currentTime = Date.now() / 1000;
if (decodedToken.exp < currentTime) {
// 刷新Token的代码
}
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
```
2.使用Promise.all():Promise.all()方法接收一个Promise对象的数组作为参数,并返回一个新的Promise对象。当所有的Promise对象都成功时,新的Promise对象才会成功;当有一个Promise对象失败时,新的Promise对象就会失败。可以在Promise.all()方法中同时发起原始请求和刷新Token的请求,当Token刷新后再重新发起原始请求。示例代码如下:
```
const refreshTokenPromise = axios.post("/api/refreshToken");
const originalPromise = axios.get("/api/someApi");
Promise.all([refreshTokenPromise, originalPromise])
.then((responses) => {
const originalResponse = responses[1];
// 处理原始请求的响应数据
})
.catch((error) => {
// 处理错误
});
```
以上是两种处理方式,你可以根据实际情况选择适合自己的方式。
阅读全文