Когда вызов api addPlacement выдает 409 (конфликтная ошибка), страница пользовательского интерфейса продолжает загружаться. Я хочу показать ошибку «Произошла ошибка конфликта» и прекратить загрузку, когда api выдает 409.

addPlacement$ = createEffect(() =>
    this.actions$.pipe(
      ofType(PlacementActions.AddPlacement),
      mergeMap(action =>
        this._placementAPIClient.addPlacement(action.payload).pipe(
          switchMap(data => {
            console.log(action.payload);
            this._slotAPIClient.UpdateSlotsPostPlacement([{'firstName':action.payload.studentDetails.firstName.....}]).subscribe((res)=>{});
            return [PlacementActions.AddPlacementSuccess({ payload: data })];
          }),
          tap(() => {
            this._manifoldPanelService.closeAllManifoldPanels();
          }),
          catchError(error => {
            return of(PlacementActions.AddPlacementError(error));
          })
        )
      )
    )
  );
0
Ainuddin3 11 Май 2021 в 09:49

1 ответ

Лучший ответ

Эффект NgRx требует, чтобы вы отправили действие. И похоже, что ваша обработка ошибок не справляется. Это приводит к ситуации, которую вы описываете. Попробуйте добавить filter после mergeMap, чтобы отфильтровать все модификации потока, не содержащие действий.

addPlacement$ = createEffect(() =>
  this.actions$.pipe(
    ofType(PlacementActions.AddPlacement),
    mergeMap(action => { /* whole merge map magic */ }),
    filter(action => !!action)
  )
);
0
dallows 11 Май 2021 в 08:23