2016-11-25 69 views
0

让我们假设我有这样组播可观测值,许多用户

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

它返回可观察到来自高速缓存或网络数据的功能。如果值已经保存,cacheObservable将返回它,否则进行网络调用。

我想知道我怎么能处理给定的情景:

1)用户订阅的getData观察到。

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

3)在网络请求第二用户被订阅的getData观察的和另一个请求的情况下(因为高速缓存仍是空的)

我怎样才能保证第二订户将来自所述第一请求重用值和请求将只为第一次订阅?

回答

0

您可以使用Observable.share()进行组播 - 后期订阅者只要有1个订阅者就会得到相同的流,但是这只有在上游订阅者尚未完成(并且他们将丢失已发送的项目)之前订阅的情况下才有效。如果你有提前的所有用户,那么还有Observable.publish(),它返回ConnectableObservable - 一个需要调用它的connect()触发订阅

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