我们假设我有一个像这样的函数
public Observable<Data> getData() {
return Observable.concat(cacheObservable(), networkObservable()).first();
}
它使用来自缓存或网络的数据返回Observable。如果值已经保存,则cacheObservable将返回它,否则进行网络调用。
我想知道如何处理给定的场景:
1)订阅者订阅了getData observable。
2)缓存为空,因此将使用networkObservable。
3)在网络请求期间,第二个订阅者订阅了getData observable并且发出了另一个请求(因为缓存仍为空)
如何确保第二个订阅者将重复使用第一个请求中的值,并且仅针对第一个订阅请求?
答案 0 :(得分:0)
您可以使用Observable.share()
进行多播 - 一旦有1个子用户,后期订阅者将获得相同的流,但只有在上游尚未完成之前订阅的订阅者才能使用(并且它们将丢失已经丢失)项目)。如果您事先拥有所有订阅者,那么还会Observable.publish()
返回ConnectableObservable
- 需要调用其connect()
来触发订阅
public Observable<Data> getData() {
return Observable.concat(cacheObservable(), networkObservable()).first().share();
}