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

В моем приложении есть действия: «GET_USER», «GET_DOCS».

Я хочу отправлять эти действия каждые десять секунд, используя эффекты. Например,

, в некоторых компонентах я отправляю действие: startAutoDispatch, эффекты перехватывают это действие и начинают отправлять действия других через каждые десять секунд.

Примерно такой эффект:

createEffects(() => this.actions$.pipe(
 ofType('startAutoDispatch')
 switchMap(() => ([
  { type: 'GET_USER', payload: null },
  { type: 'GET_DOCS', payload: null }
 ])

Это не работает. и у меня нет таймера для отправки этих действий снова и снова.

Также я хочу, чтобы действие stopAutoDispatch диспетчеризировало, затем остановило таймер.

Как я могу решить эту проблему в rx js путь / ngrx путь?

1 Ответ

3 голосов
/ 29 января 2020
createEffects(() =>
  this.actions$.pipe(
    ofType('startAutoDispatch'),
    switchMap(() =>
      timer(0, 10 * 1000).pipe(
        mergeMap(() =>
          from([
            { type: 'GET_USER', payload: null },
            { type: 'GET_DOCS', payload: null },
          ])
        ),
        takeUntil(this.actions$.pipe(ofType('stopAutoDispatch')))
      )
    )
  )
);
  • прослушивание начала
  • использование timer для повторного запуска двух желаемых действий
  • прекратить отправку этих действий, если отправлено stopAutoDispatch (до startAutoDispatch отправляется снова)
...