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 должен помочь, т.к. он дождется выполнения промиса
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы