Javascript 在axios请求拦截器doesen'中发送请求;行不通

Javascript 在axios请求拦截器doesen'中发送请求;行不通,javascript,reactjs,axios,token,Javascript,Reactjs,Axios,Token,我正在尝试在Axios请求拦截器中发送请求。在发送任何其他请求之前,我需要等待该请求完成。(用例正在刷新访问令牌) 问题是请求从未被发送,并引发未定义的异常 以下是我正在做的: 注册拦截器: api.interceptors.request.use(handleInterceptRequest) 在每次请求之前使用该拦截器检查过期令牌: async function handleInterceptRequest(config) { if(config.url === '/auth/refre

我正在尝试在Axios请求拦截器中发送请求。在发送任何其他请求之前,我需要等待该请求完成。(用例正在刷新访问令牌)

问题是请求从未被发送,并引发
未定义的
异常

以下是我正在做的:

注册拦截器:

api.interceptors.request.use(handleInterceptRequest)

在每次请求之前使用该拦截器检查过期令牌:

async function handleInterceptRequest(config) {
  if(config.url === '/auth/refresh'){
    return false;
  }

  return new Promise(async (resolve, reject) => {
    const token = store.getState().app.token;

    //Check if token has expired:
    if (token && Date.now() / 1000 >= jwtDecode(token).exp) {
      try{
        //Token has expired - trigger method below to send a refresh request and save the new token
        await refreshToken(token);
      } catch(error){
        reject(error); // error is caught here but is undefined
      }
    }
    //Only when everything is finished resolve the requst config and let other requests pass
    resolve(config);
  });
}

async function refreshToken(prevToken) {
  //Trying to send the request (The destructiring is not the issue)
  const { data :  { access_token } } = await api({
    url: '/auth/refresh',
    method: 'post',
    headers: {
      Authorization: `Bearer ${prevToken}`
    }
  });

  //I never get here
  api.defaults.headers.common.Authorization = `Bearer ${access_token}`;
  setItem('token', access_token);
  store.dispatch(setToken(access_token));
  return access_token;
}

刷新请求从未发送,并引发异常。谁能告诉我为什么会这样

我还尝试在refreshToken函数中执行类似的操作:

这项工作:


async function refreshToken(prevToken) {
  const data = await new Promise(resolve => {
    setTimeout(() => {
      resolve('foo');
    }, 1000);
  });

  return data;
}

这不起作用:


async function refreshToken(prevToken) {
  const { data } = await api({
    method: 'post',
    url: 'https://jsonplaceholder.typicode.com/posts',
    headers: {
      "Content-type": "application/json; charset=UTF-8"
    },
    data: {
      title: 'foo',
      body: 'bar',
      userId: 1
    }
  });


  return data;
}

因此,这个拦截器设置肯定有问题,它甚至不允许启动axios请求


谢谢

它会调用refreshToken吗?@MuhammadHaseeb是的,它会调用,但它永远不会超过axios请求被接受的那一行。请参阅“我从未到过这里”的评论。它还抛出未定义的异常(请参见intercept方法中的catch)