Я использую аутентификацию токена в своем веб-приложении. Мой access token истекает каждые N минут, а refresh token используется для входа в систему и получения нового access token.
Я использую Axios для всех вызовов API. У меня есть перехватчик, настроенный для перехвата ответов 401.
axios.interceptors.response.use(undefined, function (err) {
  if (err.status === 401 && err.config && !err.config.__isRetryRequest) {
    serviceRefreshLogin(
      getRefreshToken(),
      success => { setTokens(success.access_token, success.refresh_token) },
      error => { console.log('Refresh login error: ', error) }
    )
    err.config.__isRetryRequest = true
    err.config.headers.Authorization = 'Bearer ' + getAccessToken()
    return axios(err.config);
  }
  throw err
})
В принципе, когда я перехватываю ответ 401, я хочу сделать логин и повторить исходный отклоненный запрос с новыми токенами. Моя функция serviceRefreshLogin вызывает setAccessToken() в своем блоке then. Но проблема в том, что
блок then происходит позже, чем getAccessToken() в перехватчике, поэтому повторение происходит со старыми учетными данными с истекшим сроком.
 getAccessToken() и getRefreshToken() просто верните существующие токены, хранящиеся в браузере (они управляют локальным хранилищем, куки и т.д.).
Как я могу сделать, чтобы утверждения не выполнялись до тех пор, пока не вернется обещание?
(Здесь соответствующая проблема в github: https://github.com/mzabriskie/axios/issues/266)
