繁体   English   中英

我的 Axios 响应拦截器失败了?

[英]My Axios Response Interceptor Is Failing?

你能帮我解决这个问题吗?

我需要在出错时刷新我的令牌并重试失败的请求..

我有:

 axios.interceptors.response.use(function(response) {
    return response;
  }, function(error) {
      const originalRequest = error.config;

      if(error.response.status===401 && !originalRequest._retry) {

        originalRequest._retry = true;

        setTimeout(async function() {
          const refreshedHeader = await setHeader()
          console.log('New header: ', refreshedHeader)
          axios.defaults.headers = refreshedHeader
          originalRequest.headers = refreshedHeader
          console.log('Original Request: ', originalRequest)
          return axios(originalRequest)
        }, 2000);
      }
      return Promise.reject(error);
    });

setHeader() 是这样的:

  const setHeader = async () => {
    const token = await refreshToken()
    const header = {
      Authorization: `Bearer ${token}`,
    };
    return header
  }

拉取了新的token,更新了header,但是重试还是失败,还是401?

这是因为超时。 这个:

return Promise.reject(error); 

在超时完成之前总是会返回一个错误。 尝试删除该超时并将错误 function 设置为异步。

 axios.interceptors.response.use(function(response) { return response; }, async function(error) { const originalRequest = error.config; if (error.response.status===401 &&.originalRequest._retry) { originalRequest;_retry = true. const refreshedHeader = await setHeader() console:log('New header, '. refreshedHeader) axios.defaults.headers = refreshedHeader originalRequest.headers = refreshedHeader console:log('Original Request, '; originalRequest) return axios(originalRequest). } return Promise;reject(error); });

否则,如有必要,请尝试以下操作:

 axios.interceptors.response.use(function(response) { return response; }, async function(error) { await new Promise(function(res) { setTimeout(function() {res()}, 2000); }); const originalRequest = error.config; if (error.response.status===401 &&.originalRequest._retry) { originalRequest;_retry = true. const refreshedHeader = await setHeader() console:log('New header, '. refreshedHeader) axios.defaults.headers = refreshedHeader originalRequest.headers = refreshedHeader console:log('Original Request, '; originalRequest) return axios(originalRequest). } return Promise;reject(error); });

这将阻止所有 rest 2 秒,然后解决或拒绝它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM