首页 > 解决方案 > 如何在使用 redux-observable 刷新令牌后重试获取?

问题描述

我是 RxJS 的新手,如果它以未经授权的错误响应,我需要重新尝试将项目获取到 api。我需要调用刷新令牌端点,然后重试获取。如何使用来自 redux-observable 的史诗来做到这一点?我想它应该看起来像这段代码,但我不确定在 catchError 块中做什么。

export const getItemsEpic = (action$) =>
action$.pipe(
    ofType('FETCH_ITEMS'),
    switchMap(() => getItemsRequest()),
    map((response) => addItemsAction(response.data)),
    catchError(err => {
        ???
    }),
);

标签: javascriptreactjsrxjsobservableredux-observable

解决方案


您可以尝试添加这样的管道

export const getItemsEpic = (action$) =>
action$.pipe(
  ofType('FETCH_ITEMS'),
  switchMap(() => getItemsRequest()),
  map((response) => addItemsAction(response.data)),
  catchError(error => {
    // some logic how to refresh to token.
    return ajax('refreshtoken').pipe(switchMapTo(throwError(error)));
  ),
  retry(1), // allows only 1 failure.
);

推荐阅读