Эффекты NGRX: отправляйте несколько действий индивидуально - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть следующий эффект:

  @Effect()
  bookingSuccess$: Observable<Action> = this.actions$.pipe(
    ofType(BookingActionTypes.BOOK_SEAT_SUCCESS),
    map((action: BookSeatSuccess) => action.payload.userUuid),
    switchMap(userUuid => [
      new SetConfirmation({confirmationType: ConfirmationType.Booking}),
      new GetAllBookings({floorId: this.configService.getSelectedFloorId()}),
      new HighlightUser({highlightedUser: userUuid})
    ])
  );

Моя цель - отправить последнее действие с задержкой.

К сожалению, поместить его в свой собственный файл switchMap не работает, по крайней мере, так, потому что тогда все задерживается:

@Effect()
  bookingSuccess$: Observable<Action> = this.actions$.pipe(
    ofType(BookingActionTypes.BOOK_SEAT_SUCCESS),
    map((action: BookSeatSuccess) => action.payload.userUuid),
    switchMap(userUuid => {
      // DOES NOT WORK, BECAUSE NOW ALL ACTIONS ARE DELAYED 5s
      return of(new HighlightUser({highlightedUser: userUuid})).pipe(delay(5000));
    }
    switchMap(() => [
      new SetConfirmation({confirmationType: ConfirmationType.Booking}),
      new GetAllBookings({floorId: this.configService.getSelectedFloorId()})
    ])
);

Как я могу отправлять несколько действий и обрабатывать одно по-разному / асинхронно с задержкой?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете вместо массива вернуть merge (статический вариант), а затем превратить каждое действие в наблюдаемое и просто задержать последнее с помощью delay().

switchMap(userUuid => merge(
  of(new SetConfirmation({confirmationType: ConfirmationType.Booking})),
  of(new GetAllBookings({floorId: this.configService.getSelectedFloorId()})),
  of(new HighlightUser({highlightedUser: userUuid})).pipe(
    delay(1000),
  ),
)),
...