Цепочка двух действий в ngrx - PullRequest
0 голосов
/ 29 октября 2019

У меня есть два связанных действия, которые должны запускаться одно за другим.

Я хотел бы сделать это с @effects или reducers

в моем компоненте slider.com. Я запускаюпервое родительское действие

valueChange(event: MatSliderChange) {
  this.store.dispatch(
    new SetSelectDateTime({ dateSelect: this.date, timeSelect: event.source.displayValue })
  );
}

затем в редукторе

case ESelectDateTimeActionTypes.SetSelectDateTime: {

  return {
    ...state,
    dateTimeSelect: action.payload
  };
}

Теперь мне нужно запустить второе действие, чтобы получить новые данные в зависимости от выбранного времени. Итак, я создал эффект updateActualTrips

export class SchedulingsEffects {
  constructor(
    private actions$: Actions,
    private apiCallsService: ApiCallsService
  ) {}
  loadSchedulings$ = createEffect(() =>
    this.actions$.pipe(
      ofType(ESchedulesActions.GetSchedulesByDate),
      mergeMap(() =>
        this.apiCallsService.getSchedulings().pipe(
          map(trips => ({ type: ESchedulesActions.GetSchedulesByDateSuccess, payload: trips })),
          catchError(() => EMPTY)
        )
      )
    )
  );

  $LoadKpiMission = createEffect(() =>
    this.actions$.pipe(
      ofType<any>(EKpiActions.GetMissionsByStation),
      mergeMap(action =>
        this.apiCallsService.getKpiMissionByStation(action.payload, '2016-04-18').pipe(
          map(trips => ({ type: EKpiActions.GetMissionsByStationSuccess, payload: trips })),
          catchError(() => EMPTY)
        )
      )
    )
  );
  $updateActualTrips = createEffect(() =>
    this.actions$.pipe(
      ofType<any>(ESelectDateTimeActionTypes.SetSelectDateTime),
      map(action => ({ type: ESchedulesActions.GetNextSchedulesByTime, payload: action.payload }))
    )
  );
}

Проблема в том, что эффект никогда не срабатывает, но выбранное время обновляется

Обновление Я заметил, что эффект срабатывает в первый раз, когда SetSelectDateTime получаетинициализирован

1 Ответ

0 голосов
/ 29 октября 2019

В вашем примере кода нет эффекта, ожидающего действия ESchedulesActions.GetNextSchedulesByTime, единственные другие действия, которые вы ожидаете, это ESchedulesActions.GetSchedulesByDate и EKpiActions.GetMissionsByStation.

Вы пропустили фактический эффект здесьили мы не видим полный код? Ничто в вашем коде не будет запрашивать у API новые данные при отправке SetSelectDateTime.

Или вы говорите, что ESchedulesActions.GetNextSchedulesByTime никогда не отправляется в хранилище с самого начала (когда эффект прослушивается для SetSelectDateTime работает)?

...