我是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上捕获它?感谢所有答案和链接!