2

当用户身份验证超时时,我正在使用 connected-react-router 历史记录导航到登录屏幕。为此,我使用 axios 拦截器来捕获所有响应并检查它们是否返回指示上述情况的错误消息。我这样做如下所示:

    this.client.interceptors.response.use(response => response, error => {
      if(error.response.status === 401 && store && store.getState().user){
        store.dispatch(actions.resetUser())
        history.push('/login?authErr')
      }
      Promise.reject(error.response)
    })

路由工作得很好,但是反应仍然尝试渲染我导航离开的组件。由于后端以错误响应,组件接收的数据为空,这导致应用程序抛出类型错误并崩溃。

由于在身份验证超时后应用程序中的任何 api 调用都可能发生这种情况,有没有办法可以抑制此渲染?或重置应用程序?我是否必须尝试将所有 api 调用包装起来?

4

1 回答 1

0

我想到了。在我编辑我的代码时,我从 promise.reject 前面删除了返回。因此,当响应作为错误返回时,它没有被处理。

    this.client.interceptors.response.use(response => response, error => {
      if(error.response.status === 401 && store && store.getState().user){
        store.dispatch(actions.resetUser())
        history.push('/login?authErr')
      }
      return Promise.reject(error.response)
    })
于 2019-07-26T14:56:41.287 回答