我正在寻求一个流程的例子,我试图在RxJava的帮助下实现.
假设我想显示一个数据列表.流程应如下所示:
向服务器发送API请求:
如果它返回了数据,则将其缓存并显示.
如果它返回并且错误且没有缓存数据,则显示错误.
如果它返回并且错误并且有缓存的内容,那么什么都不做.
现在我有一种方法可以做类似的事情(从Jake的u2020获得很多灵感).主要区别在于它使用内存缓存,这意味着不需要单独Observable从缓存中读取,它可以同步完成.
我不知道如何组合两个observable(一个用于从缓存读取而另一个用于API调用)并获得上述流程.
有什么建议?
这是我的解决方案:
readDataFromCache().defaultIfEmpty(null)
.flatMap(new Func1<Data, Observable<Data>>() {
@Override
public Observable<Data> call(final Data data) {
if (data == null) {
// no cache, show the data from network or throw an error
return apiCall();
} else {
return Observable.concat(
Observable.just(data),
// something cached, show the data from network or do nothing.
apiCall().onErrorResumeNext(Observable.<Data>empty()));
}
}
});
Run Code Online (Sandbox Code Playgroud)
我没有添加subscribeOnandobserveOn因为我不确定readDataFromCache()是否应该使用ioScheduleror uiScheduler。
| 归档时间: |
|
| 查看次数: |
6195 次 |
| 最近记录: |