在下面的代码段中,如果更新操作成功,我想发出GetData
操作,如果不成功,我想发出BackendError
操作。
@Effect()
updateData$ = this.actions$.pipe(
ofType(MyActionType.UPDATE_DATA),
map((action: UpdateData) => action.payload),
combineLatest(this.authService.getUser(), (myData, user) => this.dataService.updateData(myData, user)),
map(() => new GetData()),
catchError((err) => { of(new BackendError(err)))
);
以上代码似乎不起作用。即使更新操作因权限错误而失败,也不会发出BackendError
操作。
感谢任何帮助。
答案 0 :(得分:1)
您当前的实现将吞噬updateData
操作上的错误,因为action$
(外部可观察对象)被映射到new GetData()
操作,无论{{1}的结果如何操作(成功或失败)。
在下面的实现中,updateData
运算符将运行catchError
操作(updateData
- 内部observable)抛出错误..
dataUpdate$
其他资源
mergeMap
and map
。mergeMap
的官方文档。 @Effect()
updateData$ = this.actions$.pipe(
ofType(MyActionType.UPDATE_DATA),
mergeMap((action: UpdateData) => {
const user$ = this.authService.getUser();
const dataUpdate$ = user$.pipe(
mergeMap(user => this.dataService.updateData(action.payload, user));
);
return dataUpdate$.pipe(
map(() => new GetData()),
catchError(err => of(new BackendError(err)))
);
})
);
中@Effect
使用此方法的示例。