如何处理效果中的If-else条件,以引发错误或从API返回响应?

时间:2019-06-14 17:26:21

标签: angular rxjs ngrx ngrx-effects

我正在尝试检查是否会引发错误或继续调用shd返回响应的API的条件。我不确定该如何处理。

在rxjs中不是很好。新手学习绳索。以下代码可以实现此目的吗?也就是说,如果我没有披萨ID,我想触发另一个错误效果,否则调用API来获取披萨

os.rename

1 个答案:

答案 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),因为只会发出一个值。