Javascript 使用Axios拦截器停止请求并检查令牌过期

Javascript 使用Axios拦截器停止请求并检查令牌过期,javascript,promise,xmlhttprequest,axios,Javascript,Promise,Xmlhttprequest,Axios,我正在尝试查看令牌是否过期,如果过期,则发送刷新请求,然后继续执行 axios.interceptors.request.use(config => { let accessToken = getAccessToken() if (accessToken && user) { config.headers['authorization'] = `Bearer ${accessToken}` config.headers['cache-control

我正在尝试查看令牌是否过期,如果过期,则发送刷新请求,然后继续执行

axios.interceptors.request.use(config => {
  let accessToken = getAccessToken()

  if (accessToken && user) {
    config.headers['authorization'] = `Bearer ${accessToken}`
    config.headers['cache-control'] = `no-cache`

    const { exp } = jwtDecode(accessToken)

    if (Date.now() > exp * 1000) {
      refreshAccessToken().then(() => { return config }) // wait for refresh
    } else {
      return config
    }
  }

}, function (error) {
  return Promise.reject(error)
})
这是一个具有承诺的刷新令牌函数:

function refreshAccessToken() {
  return new Promise(async (resolve, reject) => {

    if (refreshing) return resolve('refresh in progress')

    refreshing = true
    let refreshToken = getRefreshToken()

    let response = await serverTokenRefresh(refreshToken)
    if (response.success) {
      setAccessToken(response.accessToken)
      response.email = user
      setLocalStorageUser(response)
      refreshing = false

      return resolve('refresh successful')
    } else {
      await logOut()
      refreshing = false

      return reject(Error('refresh fail: ' + response.message))
    }
  })
}
出于某种原因,Axios不想等到刷新功能完成,也不想向服务器发送任何调用


我做错了什么?

可能是在第一个回调函数中,它需要作为
Promise
返回,或者声明为
async

axios.interceptors.request.use(async config => {
  let accessToken = getAccessToken()

  if (accessToken && user) {
    config.headers['authorization'] = `Bearer ${accessToken}`
    config.headers['cache-control'] = `no-cache`

    const { exp } = jwtDecode(accessToken)

    if (Date.now() > exp * 1000) {
      await refreshAccessToken(); // wait for refresh
      return config;
    } else {
      return config
    }
  }

}, function (error) {
  return Promise.reject(error)
})

“refreshAccessToken()中缺少一个文本
return
。然后(()=>{return config})//等待刷新。”`