如何每隔十秒分派动作并阻止它们执行另一动作?

时间:2020-01-29 09:27:59

标签: angular rxjs ngrx

在我的应用程序中,我有以下操作:'GET_USER','GET_DOCS'。

我想使用效果每十秒钟调度一次这些动作。

例如,在某些组件中,我调度了一个动作:startAutoDispatch,这些效果会捕获该动作并开始每隔10秒分发其他动作。

类似这样的效果:

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

这不起作用。而且我没有计时器来一次又一次地调度这些动作。

我也想要操作stopAutoDispatch派发然后停止计时器。

如何以rxjs / ngrx方式解决此问题?

1 个答案:

答案 0 :(得分:3)

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重复发出您想要的2个动作
  • 如果调度了stopAutoDispatch(直到再次调度startAutoDispatch,则停止调度那些动作)