在我的应用程序中,我有以下操作:'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方式解决此问题?
答案 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
,则停止调度那些动作)