【发布时间】:2019-03-07 10:07:22
【问题描述】:
我看到了一些 SO 答案,以及 this 中等帖子,但这些仍然不能解决我当前的问题。
场景:
- 添加产品。
- 如果成功,获取所有产品的列表。
这两种情况都可能有错误:
- 业务错误,包含业务特定的错误消息
- 网络错误、40x 错误代码等通用内容
目前,我的效果是使用服务添加产品,并根据操作失败的成功发送操作。这将使用将 currentProduct 设置为添加的产品来更新商店。
@Effect()
addProduct$: Observable<Action> = this.actions$.pipe(
ofType(AddProductAction),
map((action: AddProductAction) => action.payload),
switchMap((ProductToAdd: Product) =>
this.productService.addProduct(ProductToAdd).pipe(
map(response => {
if (this.responseContainsBusinessError(response)) {
return new AddProductBusinessError(response);
} else { // no business error
return new AddProductSuccess(response);
}
}),
catchError(err => of(new AddProductFail(err))) // network/http error etc
)
)
);
有人可以说明如何更改此代码,以便我可以添加第二个效果/api 调用以从服务器获取产品列表吗?
【问题讨论】:
-
我建议使用
mergeMap并调度一系列动作:[new AddProductSuccess(response), new LoadProductsRequest()]这样,您的addProduct$效果就不会变得混乱,而且您还拥有一个可重复使用的LoadProducts效果。 -
如何调度包含错误处理部分的数组?我发布的链接使用了一个带有 switchmap 的数组,我理解了数组部分,但不知道如何将我的错误处理与它结合起来
-
只要用
mergeMap代替map就可以返回一个数组了。
标签: angular error-handling ngrx chaining ngrx-effects