ngrx - связывает эффекты с обработкой ошибок: извлекает данные из второго API, если первая загрузка API прошла успешно - PullRequest
1 голос
/ 07 марта 2019

Я видел некоторые из SO-ответов, а также этот средний пост, но они все еще не решают мою текущую проблему.

Сценарий:

  1. Добавить товар.
  2. В случае успеха получите список всех продуктов.

В каждом из этих двух случаев могут быть ошибки:

  1. Бизнес-ошибки, содержащие сообщения об ошибках, специфичных для бизнеса
  2. Сетевые ошибки, общие вещи, такие как 40x коды ошибок и т. Д.

В настоящее время у меня есть эффект, который будет использовать службу для добавления продукта и отправлять действие, основанное на успешном завершении операции. Это обновит магазин с текущим продуктом, установленным на добавленный продукт.

  @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, чтобы получить список продуктов с сервера?

1 Ответ

3 голосов
/ 07 марта 2019

Просто добавьте еще один @Effect, который сработает на AddProductSuccess.

@Effect()
  listAllProducts$: Observable<Action> = this.actions$.pipe(
    ofType(AddProductSuccess),
    ....
...