几个可观察者链在一起完成

时间:2014-06-23 17:38:35

标签: rx-java

我需要使用第一个可观察的结果来创建第二个observable并订阅它的结果,有时它需要3到4层的可观察量。完成此任务的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

如果你只是简单地链接它们并使用第四个Observable,你可以直接使用这些对象,一切都会正常工作(假设你在这里使用Scala):

val obs1 = Observable.interval(1 second)
val obs2 = obs1.map(_*2)
obs2.subscribe(println(_))

另一方面,如果 obs1 是一个数据源,并且您需要多个单独的订阅,这将无效,因为第一个订阅将消耗所有数据。所以这段代码将完全相同:

val obs1 = Observable.interval(1 second)
val obs2 = obs1.map(_*2)
obs2.subscribe(println(_))
obs2.subscribe(println("I am never executed !"))

在这种情况下,你必须将这个(冷)Observable转换为热的Observable,i。即一个Subject

val s = new Subject()
s.onNext("I am a value")
...
s.subscribe(println("first print : "+_))
s.subscribe(println("second print : "+_))

此处所有订阅者都将收到数据。

Here is an example复杂代码,其中您有一个Observables主题,它是特定关键字的Twitter Feed。这是一个允许几个Observable订阅它然后在不同的Observable中并行执行完全不同的东西的主题。