Как исправить порядок выполнения в NgRx Effects? - PullRequest
0 голосов
/ 03 апреля 2019

Эффект должен взять полезную нагрузку и показать ее в диалоговом окне. После того, как диалог ЗАКРЫТ, он должен что-то опубликовать и отправить новое действие.

Проблема в том, что действие отправляется до того, как я закрою диалоговое окно.

 @Effect()
  bookTable$ = this.actions$.pipe(
    ofType(BookTableActionTypes.BOOK_TABLE),
    map(action => action.payload),
    exhaustMap((booking: Booking) => this.dialog.open(BookTableDialogComponent, {
      width: this.window.responsiveWidth(),
      data: booking.booking,
    }).afterClosed()
      .pipe( () =>  this.bookTableService.postBooking(booking),
        map((res: any) => new BookTableSuccess(res)),
        catchError(error => of(new BookTableFail({error: error})))
      )));
.pipe( () =>  this.bookTableService.postBooking(booking),
        map((res: any) => new BookTableSuccess(res)),
        catchError(error => of(new BookTableFail({error: error})))
      )));

Приведенный выше код должен выполняться только после закрытия диалога.

1 Ответ

0 голосов
/ 03 апреля 2019

Похоже, что в вашем pipe отсутствует оператор rxjs для вызова вашего API.Попробуйте switchMap изменить наблюдаемое.

.pipe( 
   switchMap(() =>  this.bookTableService.postBooking(booking)),
   map((res: any) => new BookTableSuccess(res)),
   catchError(error => of(new BookTableFail({error: error})))
);
...