RXJS Observable Epic LOCATION_CHANGE在受保护的路由重定向之前运行

时间:2018-09-10 09:14:45

标签: reactjs redux rxjs observable

我有一个问题,我有一个受保护的路由,该路由被下面的Epic提取。如果不符合访问受保护路由的条件,则会将用户重定向到另一个页面。不幸的是,这种效果仍然存在,在这种情况下这是一个承诺,将失败并向用户显示错误。

export const examplePageLoadEffect: Epic<AnyAction, IAppState> = (action$) =>
  action$
    .ofType(LOCATION_CHANGE)
    .map((action: LocationChangeAction) => action.payload.pathname)
    .filter((url) => /protected-path/.test(url))
    .switchMap((url) => {
        return Observable.fromPromise(fetchSomePromise())
          .switchMap((promiseResponse) => Observable.of(
            doSomethingWithPromise(promiseResponse)
          ))
          .catch((err) => Observable.of(doSomethingWithError(err));
      }
    );

是否有一种解决方法,如果将受保护的路由重定向到另一条路由,则该路由会停止?

谢谢。

1 个答案:

答案 0 :(得分:1)

是的,您可以使用takeUntil operator,请参阅Redux Observable - Cancellation

此外,请记住,Promise通常无法取消,因此您可能想使用Observables