deadrime
@deadrime
Fullstack web developer

Как дождаться выполнения функции?

Кейс такой - токен может устареть и нужно его обновить. Для этого отлавливаю 401 и получаю новый токен. Трабла в том, что при параллельных запросах токен будет обновляться несколько раз. Каким образом можно дождаться завершения обновления токена?

let token = null
let authHeader = {}
let isUpdating = false

const authorize = async () => {
  token = await axios.get(...)
  authHeader = {
    Authorization: `Bearer ${token}`,
  }
}

const getRequester = async () => {
  if (!token) await authorize()

  const requester = axios.create({
    headers: authHeader,
  });

  requester.interceptors.response.use(
    response => response.data,
    async error => {
      if (error.response.status === 401) { // если токен устарел
        if (!isUpdating) {
          isUpdating = true
          await authorize()
          isUpdating = false
        } else {
          // тут как-то нужно дождаться обновления токена
        }
        error.config.headers = authHeader
        return requester.request(error.config)
      }
      return Promise.reject(error);
  });

  return requester
}


Можно наверное что-то вроде
const waitForUpdating = new Promise(resolve => {
  setInterval(() => {
    if (!isUpdating) resolve()
  }, 50)
})

но как-то это не очень
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Dasslier
FrontEnd Developer
Почему не попробовал вариант с await в else? Если правильно понял смысл вопроса, то await должен помочь, т.к. он дождется выполнения промиса
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы