Кейс такой - токен может устареть и нужно его обновить. Для этого отлавливаю 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)
})
но как-то это не очень