【问题标题】:How to dispatch actions every ten seconds and stop them on another action?如何每十秒调度一次动作并在另一个动作上停止它们?
【发布时间】:2020-05-14 18:30:42
【问题描述】:

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

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

例如,在某个组件中,我调度了一个动作:startAutoDispatch,效果会捕获此动作并开始每十秒调度其他动作。

类似这样的效果:

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

这是行不通的。而且我没有计时器来一次又一次地发送这些操作。

我还想如果动作stopAutoDispatch dispatch 然后停止计时器。

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

【问题讨论】:

    标签: angular rxjs ngrx


    【解决方案1】:
    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

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 1970-01-01
      • 2020-08-05
      • 2016-02-02
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      相关资源
      最近更新 更多