【发布时间】:2020-02-29 00:11:43
【问题描述】:
我正在尝试捕获有关特定操作效果的错误。一切正常,无论通话成功还是失败。但是,我认为代码非常冗长,可以改进,特别是:
- catchError 部分,我返回
empty(),但我认为应该返回SavedReplyDeleteFailed操作。这样做时,整个效果会中断并且无法编译,不确定处理此问题的最佳做法是什么。 - 我过于依赖
tap和dispatch而不是从map/mergeMap 回调中返回操作。当我这样做时,效果编译也会中断。
如何应用上述改进?
deleteSavedReply = createEffect(() => this.actions$.pipe(
ofType(SavedRepliesActions.SavedReplyDeleteRequested),
mergeMap( action => {
this.store.dispatch( SavedRepliesActions.DeleteLoading({ isLoading: true }) );
return this.savedRepliesService.deleteSavedReply(action.id).pipe(
tap(res => {
this.store.dispatch( SavedRepliesActions.SavedReplyDeleteSucess({ id: action.id }));
this.toastr.success( 'Saved Reply has been successfully deleted');
}),
catchError((error) => {
this.store.dispatch( SavedRepliesActions.SavedReplyDeleteFailed({message: error.message}) );
this.toastr.error( error.message, 'Something went wrong');
this.store.dispatch( SavedRepliesActions.DeleteLoading({ isLoading: false }) );
return empty();
})
);
}),
map(() => {
return SavedRepliesActions.DeleteLoading({ isLoading: false });
}),
));
【问题讨论】: