多播可观察到许多订阅者的价值

时间:2016-11-25 21:22:51

标签: rx-java

我们假设我有一个像这样的函数

public Observable<Data> getData() {
    return Observable.concat(cacheObservable(), networkObservable()).first();
}

它使用来自缓存或网络的数据返回Observable。如果值已经保存,则cacheObservable将返回它,否则进行网络调用。

我想知道如何处理给定的场景:

1)订阅者订阅了getData observable。

2)缓存为空,因此将使用networkObservable。

3)在网络请求期间,第二个订阅者订阅了getData observable并且发出了另一个请求(因为缓存仍为空)

如何确保第二个订阅者将重复使用第一个请求中的值,并且仅针对第一个订阅请求?

1 个答案:

答案 0 :(得分:0)

您可以使用Observable.share()进行多播 - 一旦有1个子用户,后期订阅者将获得相同的流,但只有在上游尚未完成之前订阅的订阅者才能使用(并且它们将丢失已经丢失)项目)。如果您事先拥有所有订阅者,那么还会Observable.publish()返回ConnectableObservable - 需要调用其connect()来触发订阅

public Observable<Data> getData() {
   return Observable.concat(cacheObservable(), networkObservable()).first().share();
}