如何切换(开始/停止)ngrx 操作?

下面是一个将加载操作分派到商店的操作。相应的效果将处理请求并发送回响应项。


但我想要的是我想用一个按钮来切换下面的动作。


因此,如果我按开始,它将每 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 我能够暂停)但无法重新启动。


潇湘沐
浏览 94回答 1
1回答

慕田峪7331174

要在效果中进行切换,您需要 2 个操作(开始和停止)并使用takeUntil.//effects.ts&nbsp; loadCourierItems$ = createEffect(() =>&nbsp; &nbsp; this.actions$.pipe(&nbsp; &nbsp; &nbsp; ofType(actions.start),&nbsp; &nbsp; &nbsp; exhaustMap(action => interval(1000).pipe(&nbsp; &nbsp; &nbsp; &nbsp; // logic for every second activity.&nbsp; &nbsp; &nbsp; &nbsp; map(actions.everySecondAction()),&nbsp; &nbsp; &nbsp; )),&nbsp; &nbsp; &nbsp; takeUntil(this.actions$.pipe(ofType(actions.stop))),&nbsp; &nbsp; &nbsp; repeat(),&nbsp; &nbsp; )&nbsp; )//app.component.ts&nbsp; constructor(private store: Store<CourierItemsState>) {&nbsp; }&nbsp; ngOnInit() {&nbsp; &nbsp; this.store.dispatch(startAction());&nbsp; }&nbsp; ngOnDestroy() {&nbsp; &nbsp; this.store.dispatch(stopAction());&nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript