RxJava:结合冷热观察

时间:2015-11-11 12:55:45

标签: reactive-programming rx-java

我有两个Observable。它们都是Observable<T>类型。

其中一个是名为initialValueObservable的冷门,它只是通过Observable.from()从项目列表中发出。

另一个名为valueUpdateObservable的热门名称是PublishSubject,当有新项目时会通知订阅者。

在客户端中,我想同时订阅这两个,因此我从initialValueObservable获取初始值,并valueUpdateObservable发布更新。 我最初的方法是将它们合并,但我认为这不会起作用,因为initialValueObservable将发送onComplete,此时valueUpdateObservable所发出的新项目不会被取消到达。

2 个答案:

答案 0 :(得分:3)

当您进行合并时,onComplete仅在所有源可观察对象(在本例中均为完成)完成时发送。

以此(c#Rx.NET)代码为例:

Observable
    .Return(42L)
    .Merge(Observable.Interval(TimeSpan.FromSeconds(1.0)).Take(3))
    .Subscribe(x => Console.WriteLine(x));

它产生:

42
0
1
2

如果RxJava做了不同的事情,我会感到震惊。

答案 1 :(得分:1)

如果有人来找这个,这是一个例子

Observable.concat(
    coldObservable.doOnComplete{ () -> Log.d(TAG, "cold observable completed"); },
    hotObservable.doOnComplete{ () -> Log.d(TAG, "hot observable completed") }
.subscribe()

将记录所有coldObservable的值,然后记录“cold observable completed”,然后记录所有hotObvservable的值。 “hot observable completed”将不会被记录,假设它类似于没有完成状态的点击监听器