Redux中间件执行动作而无需下一个调用

时间:2019-01-10 11:06:13

标签: reactjs redux redux-thunk

我有一个使用accessToken + refreshToken来使用API​​的应用程序。 我想添加一个中间件来检查accessToken并在运行API调用之前根据需要刷新它。

我面临的问题是,即使我不执行下一个方法,也总是会调度我的初始操作。

这是我的中间件:

const requestMiddleware = store => next => action => {
  const {user, accessToken} = loadStorage();
  const payload = jwtDecoder(accessToken.access_token);
  const refreshThreshold = (Date.now() + 1000) / 1000;
  if(accessToken.refresh_token && refreshThreshold > payload.exp){
    // Here we defined that we need to refresh the token
    userConnexion.refresh(user.uuid, accessToken.refresh_token)
        .then((accessToken) => {
            // Token updated we can now run the next action
            return next(action);
          }, (error) => {
              // Error on token refresh we throw an error
              return Promise.reject(error.response.data.message);
          });
}else{
    // AccessToken is still valid so we continue with the next action
    return next(action);
}

}

例如,如果我调度一个动作USER_UPDATE,即使我不运行也将调用该动作发送下一个动作。

我认为我缺少有关redux中间件的信息,但我找不到它的含义。

我正在使用redux-think来处理我的异步操作,我认为问题是我使用它的方式,但是我找不到如何处理它。 我是否应该阻止下一个动作自动运行?

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决问题的方法。 看来我需要在重用中间件之前应用中间件。