RXJS Наблюдаемый Epic LOCATION_CHANGE запускается до перенаправления защищенного маршрута - PullRequest
0 голосов
/ 10 сентября 2018

У меня возникла проблема, когда у меня есть защищенный маршрут, подобранный ниже. Если критерии для доступа к защищенному маршруту не выполнены, пользователь перенаправляется на другую страницу. К сожалению, эффект все еще выполняется, что в данном случае является обещанием, которое не выполнится и покажет ошибку пользователю.

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 голосов
/ 10 сентября 2018

Да, для этого вы можете использовать takeUntil оператор , см. Redux Observable - Cancellation

Кроме того, имейте в виду, что Обещания обычно не могут быть отменены, поэтому вы можете вместо этого использовать Observables

...