Описание высокого уровня
У меня есть приложение React / redux / Electron, которое использует Google Oauth.Я хочу иметь возможность обновлять токен доступа автоматически, когда он истекает.Я исследовал это и решил его частично успешно, используя промежуточное ПО, но в некоторых ситуациях мое решение дает ошибку.
Я реализовал промежуточное ПО обновления, которое запускается при каждом действии API.Он проверяет, истек ли токен доступа или скоро истечет.Если это так, то вместо отправки полученного действия он отправляет действие обновления токена и ставит в очередь любые другие действия до получения нового токена доступа.После этого он отправляет все действия в своей очереди.
Однако один из моих создателей действий выглядит примерно так:
function queryThreads(params) {
return async (dispatch) => {
const threads = await dispatch(fetchThreads(params))
const newPageToken = threads.payload.nextPageToken
}
}
Когда промежуточное ПО обновления не запускается из-за того, что токен не установленне истекает, threads.payload
будет определено здесь, и все будет работать как положено.
Однако, когда промежуточное программное обеспечение обновления запустится, threads.payload
будет undefined
, потому что dispatch
, кажется, разрешается сзначение действия обновления токена, а не действия fetchThreads
.
Как мне убедиться, что токен обновляется (и обновляется в state
/ localStorage
), fetchThreads
отправляется собновленный токен и переменной threads
присваивается разрешенное значение правильного Обещания?
Ссылки на код проекта
Это мое промежуточное ПО обновления .Она была вдохновлена этой статьей kmmbvnr .
Это создатель действия обновления токена .
Это строка в моем создателе действия queryThreads , которая выдает, когда токен должен обновиться (threads.payload
равно undefined
).
Это редуктор, в котором я обновляю состояние в ответ на обновление токена.
Это промежуточное ПО, где я обновляю localStorage в ответ на обновление токена.