rx java - 如何在flatMap()中等待Observable的onComplete()



我有一个从数据库读取数据的Observable。如果数据是null,我需要从网络中获取它。所以我在第一个Observable上做flatMap,检查数据库操作的结果,如果是null,我启动另一个Observable从网络获取数据。

注意: Observable s有不同的Subscriber s,因为我有不同的后处理,这取决于数据来自哪里(这样的逻辑)。

 Observable.just(readDataFromDb()).flatMap(new Func1<SomeData, Observable<String>>() {
        @Override public Observable<SomeData> call(SomeData s) {
          if (s == null) {
            getReadFromNetworkObservable().subscribe(new AnotherSubscriber()); // this one might not complete
            return Observable.empty(); // I think I need to send this one only after readFromNetwork() completed
          } else {
            return Observable.just(s);
          }
        }
      }).subscribe(new SomeSubscirber());

假设我发送Observable.empty()来排除SomeSubscriber的数据处理,我有一种预感,我的第二个Observable不能总是完成,因为它可能只是垃圾收集。我想我是在考试的时候看到的。

此时,我想我只需要等待从网络读取的Observable完成,然后再发送Observable.empty()。那么我可以让执行同步吗?但我还是觉得我做错了。

你可以用.toBlocking快捷方式使任何可观察对象阻塞(参见完整信息https://github.com/ReactiveX/RxJava/wiki/Blocking-Observable-Operators)

Data d = getReadFromNetworkObservable()
            .toBlocking()
            .first() //  or single() or singleOrDefault()
// manipulate with data here

这里描述了将缓存与网络数据结合:http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/

这里:RxJava和Cached Data

相关内容

  • 没有找到相关文章

最新更新