在rxjs中使用catchError的正确位置在哪里

时间:2018-07-11 21:34:39

标签: javascript redux rxjs redux-observable

我是rxjs的新手,正在使用redux-observable,并且对在哪里使用rxjs的catchError函数有疑问。

我有以下代码按照需要运行:

function countEpic(action$: Observable<AnyAction>): Observable<AnyAction> {
  return action$
    .pipe(
      map(logEpic)
      ,ofType(RESET_REQUEST)
      ,flatMap(action =>
        resetCountService(action)
          .pipe(
            map(logEpic)
            ,map(newCount => ({ type: RESET_SUCCESS, payload: newCount }))
            ,catchError((error: any, caught: Observable<AnyAction>) => of({ type: RESET_FAILURE }))
          )
      )
    );
}

function resetCountService(action: AnyAction): Observable<number> {;
  return of(7)
    .pipe(
      map(newCount => { throw "broke" })
    );
}

注意:resetCountService只是一个模拟服务,代替了API服务。 将来会返回一个Observable

在我拥有之前

function countEpic(action$: Observable<AnyAction>): Observable<AnyAction> {
  return action$
    .pipe(
      map(logEpic)
      ,ofType(RESET_REQUEST)
      ,flatMap(resetCountService)
      ,map(newCount => ({ type: RESET_SUCCESS, payload: newCount }))
      ,catchError((error: any, caught: Observable<AnyAction>) => of({ type: RESET_FAILURE })))
      )
    );
}

在我的代码(之前的代码)中,catchError似乎“阻止”了Observable管道继续运行,我不确定为什么。我的问题是,为什么我需要在“内部” Observable上捕获catchError而不是在史诗般的Observable上捕获它?感谢所有答案和链接!

0 个答案:

没有答案