【问题标题】:Multicasting Observable value to many subscribers向许多订阅者多播可观察到的价值
【发布时间】:2016-11-25 21:22:51
【问题描述】:

假设我有这样的功能

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

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

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

1) 订阅者订阅 getData observable。

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

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

我如何确保第二个订阅者将重用第一个请求的值,并且请求只会针对第一个订阅发出?

【问题讨论】:

    标签: rx-java


    【解决方案1】:

    您可以使用Observable.share() 进行多播 - 一旦有 1 个订阅者,延迟订阅者将获得相同的流,但这仅适用于延迟订阅者在上游尚未完成之前订阅(并且他们将丢失已经发出的项目) .如果你事先有所有订阅者,那么还有Observable.publish(),它返回ConnectableObservable - 需要调用它的connect() 来触发订阅

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

    【讨论】:

      猜你喜欢
      • 2016-06-26
      • 2020-04-19
      • 2018-06-11
      • 2017-04-13
      • 2018-07-31
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      相关资源
      最近更新 更多