Как решить условие гонки для refre sh api токена во время нескольких асин c запросов? - PullRequest
1 голос
/ 18 февраля 2020

Имеется примерно 5 асинхронных c запросов, которые выполняются одновременно с ответом 401, и функция компенсации по умолчанию для него - попытка обновить sh токен, чтобы увидеть, сможем ли мы получить предоставленный доступ.

Проблема в том, что если есть 5 асинхронных c вызовов, чтобы обновить sh конечную точку токена, то мы заканчиваем рассинхронизированным, недействительным токеном в нашем сеансе.

Это приложение Redux-Saga с ReactJS поверх него.

1 Ответ

1 голос
/ 18 февраля 2020

Вам нужно получить какой-то сигнал, когда эти пять запросов будут выполнены. Вы можете сделать это, используя Promise.all, который принимает массив обещаний и выполняет их, когда все обещания выполнены, и отклоняет, когда хотя бы одно выполняет.

const asyncRequest1 = makeAsyncRequestPromise();
const asyncRequest2 = makeAsyncRequestPromise();
const asyncRequest3 = makeAsyncRequestPromise();
const asyncRequest4 = makeAsyncRequestPromise();
const asyncRequest5 = makeAsyncRequestPromise();

const allDone = Promise.all([
    asyncRequest1.then(() => true, () => false),
    asyncRequest2.then(() => true, () => false),
    asyncRequest3.then(() => true, () => false),
    asyncRequest4.then(() => true, () => false),
    asyncRequest5.then(() => true, () => false),
]);


allDone.then((results) => {
    const someHasFailed = results.some(result => result === false);
    if (someHasFailed) {
        // make the refresh token here
    }
});
...