无法在 axios 成功响应拦截器中调度 redux 操作

时间:2021-06-22 09:12:09

标签: javascript reactjs redux axios

通常我们在 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 调用的组件没有获得成功响应

有什么解决方法吗?

1 个答案:

答案 0 :(得分:1)

代码应该在分派之后继续执行。它可能会导致立即重新渲染,在这种情况下,重新渲染可能发生在下一行之前,但除非在任何地方抛出异常,否则 return Promise.resolve(next);执行。我认为你的问题出在别处。

相关问题