Как я могу переключить (запустить / остановить) действие ngrx? - PullRequest
1 голос
/ 25 апреля 2020

Ниже приведено действие, которое отправляет действие загрузки в магазин. Соответствующий эффект обработает запрос и отправит обратно элементы ответа.

Но я хочу, чтобы я переключил действие ниже с помощью кнопки.

Так что, если я нажму кнопку «Пуск», она начнет отправлять действия каждые 1 с, а если я нажму кнопку «Пауза», она приостановит диспетчеризацию и снова. Если я нажму кнопку «Старт», она продолжит с того места, где она оставалась, и повторяется так ...

Как я могу переключить такое действие?

    let date = 1587513626000; // date is required because the backend only sends data with a start and end date
    interval(1000).pipe(tap(_ => {
      this.store.dispatch(loadStoreItems({ limit: 10, start: date, end: date + 1000 }))
      date += 1000
    }))
      .subscribe()

Я пробовал несколько операторов, некоторые из них частично работают (например, иногда с помощью takeWhile / takeUntil я могу пауза) но не в состоянии перезапустить.

1 Ответ

2 голосов
/ 25 апреля 2020

, чтобы включить эффект, вам нужно 2 действия (запуск и остановка) и использовать takeUntil.

//effects.ts

  loadCourierItems$ = createEffect(() =>
    this.actions$.pipe(
      ofType(actions.start),
      exhaustMap(action => interval(1000).pipe(
        // logic for every second activity.
        map(actions.everySecondAction()),
      )),
      takeUntil(this.actions$.pipe(ofType(actions.stop))),
      repeat(),
    )
  )
//app.component.ts

  constructor(private store: Store<CourierItemsState>) {
  }

  ngOnInit() {
    this.store.dispatch(startAction());
  }

  ngOnDestroy() {
    this.store.dispatch(stopAction());
  }
...