Rxjs observable epic location_change запускается перед перенаправлением защищенного маршрута

У меня проблема, когда у меня есть защищенный маршрут, который выбирает приведенный ниже 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
350
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме