我想使用Rx
Java从Web服务加载数据(通过Retrofit).我还有一个以前结果的数据库缓存.
假设我已经有以下各项的可观察量:
Observable<List<MyModel>> networkObservable = retrofitService.getModels(); Observable<List<MyModel>> dbObservable = database.getModels();
我想将这两个observable合并为一个:
public class MyModelHelper { public static Observable<List<MyModel>> getModels() { // Todo: Help! } }
我想要的行为是订阅者尽快接收数据库结果,然后是restService结果(假设从数据库中获取比进行网络调用更快)
我能想出的最好的是:
public class MyModelHelper { public static Observable<List<MyModel>> getModels() { List<MyModel> emptyList = new LinkedList<>(); // 'startWith' because combineLatest wont call back until all source observables emit something Observable.combineLatest(dbObservable.startWith(emptyList),networkObservable.startWith(emptyList),new Func2<List<MyModel>,List<MyModel>,List<MyModel>>() { @Override public List<MyModel> call(List<MyModel> first,List<MyModel> second) { return merge(first,second); } }); } }
这对我来说似乎有些苛刻,我觉得在这种常见情况下必须有更好的解决方案.
如果网络可观察的错误发生,那么db结果仍然会被传递,这也会很好.我可以调用onErrorResumeNext()并返回dbObservable本身,但我仍然希望通知订阅者发生错误.
有什么建议?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。