说我的代码中有一个主题
mySubject$ = new Subject()
在代码的其他地方,可以进行任意数量的订阅,例如
someSubscription = mySubject$.subscribe(() => console.log('I love streams'))
anotherSubscription = mySubject$.subscribe(() => console.log('me too!'))
我.next()
主题时,两个订阅均按预期触发。
我该如何加入rx机制,以便在所有订阅都完成其代码运行后(对于单个next
事件),我可以运行一些代码?
是否有类似mySubject$.onAllSubscriptionsCompleted(() => console.log('all done')
或者实现此目的的替代方法是什么?
答案 0 :(得分:0)
RxJS没有这样的向后(向上?)事件传播,除非它是订阅/取消订阅。
严格地说:在订户和可观察者之间建立这种联系不是一种接收方式。
但是,有多种方法可以实现:
您可能还有另一个主题,可以将“已处理”通知推送到可观察对象并从中进行处理。噩梦般的支持,恕我直言
让您的订阅者重新订阅,并对您的观察结果做出反应。关于该订阅/取消订阅事件传播的推测。似乎更加噩梦。而且应该
具有某种背压,其中最简单的是concatMap
,您可以在其中进行所有处理。但是,使用这种方法,您将不得不重新考虑那些生成器与处理程序之间的关系
handler1
source$ -> concatMap( forkJoin( handler2 ) ) -> subscribe( here all handlers finished )
handler3
如果您想了解更多有关背压的信息,请访问backpressure techniques in RxJS