通常我们在 Axios 错误响应拦截器中调度操作,它工作正常
axiosInstance.interceptors.response.use(
(next) => {
return Promise.resolve(next);
},
(error) => {
// Dispatching to handle error 1
if (error.response.status === 401) {
if (error.response.data.errorCode === 'USER_LOGIN_ERROR_008') {
store.dispatch({ type: 'RESET_SECURITY_QUESTION', payload: { id: null, qid: null, question: null } });
}
throw error;
}
);
每个成功的 API 响应都会在用户的 cookie 中设置一个令牌,如果在接下来的 X 分钟内没有调用 API,则该令牌将过期
因此,在每次成功的 API 响应之后,我都需要在我的 App.js 中启动一个计时器,一旦该计时器结束,就会向用户显示他的会话已失效的模态
但是,如果用户的操作导致 API 调用成功,那么我想重置该计时器
要重置该计时器,我想在每次成功的 API 响应后调用 redux 操作
这就是我尝试做的
axiosInstance.interceptors.response.use(
(next) => {
console.log(`Intercepting ${next.config.url} success response`, next);
if (next.status === 200) {
store.dispatch(incrementSessionRefreshTimer());
}
return Promise.resolve(next);
},
这里有问题
每当我们使用 axios 拦截器拦截成功请求时,我们可以修改请求并且必须返回请求
在我的代码中发生的情况是我的操作被分派但响应从未返回,没有执行 store.dispatch(myAction())
以下的任何行,因此我进行 API 调用的组件没有获得成功响应>
有什么解决方法吗?
答案 0 :(得分:1)
代码应该在分派之后继续执行。它可能会导致立即重新渲染,在这种情况下,重新渲染可能发生在下一行之前,但除非在任何地方抛出异常,否则 return Promise.resolve(next);
行将执行。我认为你的问题出在别处。