我写了一篇关于完全相同场景的博客文章。我使用合并运算符(如 sockeqwe 建议的那样)并行处理您的点“2”和“4”,并使用 doOnNext处理“5”:
// NetworkRepository.java
public Observable<Data> getData() {
// implementation
}
// DiskRepository.java
public Observable<Data> getData() {
// implementation
}
// DiskRepository.java
public void saveData(Data data) {
// implementation
}
// DomainService.java
public Observable<Data> getMergedData() {
return Observable.merge(
diskRepository.getData().subscribeOn(Schedulers.io()),
networkRepository.getData()
.doOnNext(new Action1<Data>() {
@Override
public void call(Data data) {
diskRepository.saveData(data); // <-- save to cache
}
}).subscribeOn(Schedulers.io())
);
}
在我的博客文章中,如果数据相同或缓存为空,我还使用过滤器和时间戳来跳过更新 UI(您没有指定这一点,但您也可能会遇到此问题)。
帖子链接:https ://medium.com/@murki/chaining-multiple-sources-with-rxjava-20eb6850e5d9