Rxjs 在开始事件后处理事件流,并在结束事件发生时返回侦听
我正在研究的场景是由3个观察值组成的 StartObs:当我需要开始一系列处理时,此可观察数据会发出-发出的数据是我需要完成的处理的进程ID DoStuffObs:此可观察对象发出命令,我必须执行这些命令-我想在开始发出后立即开始收听此类可观察对象,我需要进程的进程ID来执行我的职责,使用函数Rxjs 在开始事件后处理事件流,并在结束事件发生时返回侦听,rxjs,Rxjs,我正在研究的场景是由3个观察值组成的 StartObs:当我需要开始一系列处理时,此可观察数据会发出-发出的数据是我需要完成的处理的进程ID DoStuffObs:此可观察对象发出命令,我必须执行这些命令-我想在开始发出后立即开始收听此类可观察对象,我需要进程的进程ID来执行我的职责,使用函数doTheWork(命令,进程ID) EndObs:当我必须结束对某个进程ID的处理,并且必须返回以收听StartObs的下一次发射时,这个可观察到的发射 所以基本上是:开始,直到结束,然后回到听下一个开始
doTheWork(命令,进程ID)
EndObs:当我必须结束对某个进程ID的处理,并且必须返回以收听StartObs的下一次发射时,这个可观察到的发射
所以基本上是:开始,直到结束,然后回到听下一个开始
还可以保证,在一次启动之后,迟早会有一个结束,并且不可能有两次启动之间没有结束,或者两次结束之间没有开始
前两个步骤可以通过开关映射实现,如
StartObs
.switchMap(processId => DoStuff.map(command => ({command, processId})))
.tap(data => doTheWork(data.command, data.processId))
我不清楚的是如何处理EndObs
使用takeUntil
的选项不起作用,因为我不想完成从StartObs开始的链,因为我必须回去聆听下一个过程的开始。实际上,我认为takeUntil()
与repeat()
结合使用是最好的选择
当链使用takeUntil()
完成时,由于repeat()
,它将立即重新订阅,整个过程将重新开始
StartObs
.switchMap(processId => DoStuff.map(command => ({command, processId})))
.tap(data => doTheWork(data.command, data.processId))
.takeUntil(EndObs)
.repeat();