我正在尝试检查是否会引发错误或继续调用shd返回响应的API的条件。我不确定该如何处理。
在rxjs中不是很好。新手学习绳索。以下代码可以实现此目的吗?也就是说,如果我没有披萨ID,我想触发另一个错误效果,否则调用API来获取披萨
os.rename
答案 0 :(得分:1)
您应该抛出BigProductError
错误,以便订阅者可以使用catchError()
来捕获它。由于已引发,因此if语句不需要 else 块。
getPizzas$ = this.actions$.pipe(
ofType<GetAllPizzas>(PizzaTypes.GetPizzas),
withLatestFrom(this.store$.pipe(select(fromRootStore.getPizzaId))),
take(1),
mergeMap(([customAction, pizzaId]) => {
if (!pizzaId) {
throw new BigProductError({appmessage : "Boom"}));
}
return this.pizzaService.getPizzas(customAction.orderDetails, pizzaId)
.pipe(
map((pizzas) => new LoadPizzasSuccess(pizzas)),
catchError(error => of(new LoadPizzasFailure(error)))
);
})
);
我也会在mergeMap()
之后使用take(1)
,因为只会发出一个值。