RxJs Observables: запустить retryWhen после еще нескольких асинхронных запросов
Мой вариант использования:
Пользователь запрашивает актив из нашего API, который завершается неудачно из-за истечения срока действия JWT (передается как файл cookie httpOnly) - API возвращает код состояния 401.Мы идем и аутентифицируем их (без участия пользователя) снова, используя refresh_token, чтобы получить новый JWT с запросом от нашего клиента на auth0.Мы отправляем этот новый JWT в наш API, который будет установлен как файл cookie httpOnly, чтобы заменить устаревший.Затем мы хотим повторить первоначальный запрос, сделанный пользователем к API на шаге 1.Я пытаюсь использовать Observables в моем приложении Redux сперевождь-наблюдаемым, Если вы можете придумать другой способ заставить вышеупомянутый пользовательский поток работать, я был бы рад услышать, как это сделать.
NB. Я используюrxjs V5
export const fetchAssetListEpic = (action$, store) => {
return action$.ofType('FETCH_ASSET_LIST')
.switchMap( action => {
const options = {
crossDomain: true,
withCredentials: true,
url: uriGenerator('assetList', action.payload)
};
return ajax(options);
})
.map(fetchAssetListSuccess)
.retryWhen(handleError)
.catch(redirectToSignIn);
};
function handleError(err) {
return (err.status === 401) ?
/* Authenticate here [Step 2] */
/* Send new JWT to API [Step 3] */
/* If successful make original request again [Step 4] */
:
Observable.throw(err);
}
function redirectToSignIn() {
/*I will redirect here*/
}
Пока я могу выполнить шаги 1, 2 и 3, но не уверен, что смогу добавить шаг 4. Я могу быть совершенно не в порядке, но любая помощь будет отличной!