在axios中,来自全局响应拦截器,是否可以调用then()

时间:2017-06-01 05:17:35

标签: reactjs axios

我正在尝试在全局拦截器中处理jwt令牌到期(401)。一旦我得到一个新的令牌,我想重试失败的方法然后调用它然后()。那可能吗?

这是我的拦截器。

ea_axios.interceptors.response.use(undefined, function (error) {
if (error.response){
    let res = error.response;
    if (res.status === 401 && res.config && !res.config.__isRetryRequest) {        
        ea_axios.get('/refresh').then(function(response){
            Object.assign(eops_axios.defaults, {headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + sessionStorage.accessToken
            }});
            error.config.__isRetryRequest = true
            error.config.headers.Authorization = 'Bearer ' + response.data
            return axios(error.config);
        }).catch(error => alert(error), reject(error));
    } else {
        return Promise.reject(error);
    }
} else {
    return Promise.reject(error);
}

});

我正在使用axios来获取所有get / put / post请求。并且,一旦上面的拦截器获得了新的访问令牌,我需要重试相同的axios方法,然后是()方法。同样明智的是,我有很多需要同样处理的axios调用。

ea_axios.get('/options')
  .then(function(response){
    if (response.data != undefined && response.data != ''){
      response.data.forEach( function(option) {
        if (option.optionName == 'applicationCloseDate'){
          _this.setState({ applicationCloseDate: option.optionValue });
        }
      });
      _this.setState({ error: false })
    }

  })
  .catch(error => _this.setState({ error: true }));

有人可以建议如何用axios做到这一点吗?

0 个答案:

没有答案