【发布时间】:2018-11-20 13:42:48
【问题描述】:
目前我在存储库类中有一个方法,它从本地缓存和远程 API 中获取数据。
public Observable<List<Items>> getItemsForUser(String userId {
return Observable.concatArrayEager(
getUserItemsLocal(userId), // returns Observable<List<Items>>
getUserItemsRemote(userId) // returns Observable<List<Items>>
);
}
目前,该方法首先获取本地数据(可能已过时)并返回,然后使用来自远程 API 的新数据进行更新。
我想将实现更改为使用Observable.merge,这样如果远程 API 请求首先完成,该数据就会首先显示。但是,如果我只使用Observable.merge,我担心本地数据库请求可能会返回陈旧数据,这将覆盖来自远程的新数据。
基本上,我想要这样的东西:
public Observable<List<ShoutContent>> getItemsForUser(String userId, ErrorCallback errorCallback) {
return Observable.merge(
getUserItemsRemote(userId),
getUserItemsLocal(userId)
.useOnlyIfFirstResponse()
}
因此,如果远程 API 请求首先完成,则该响应是唯一返回的响应。但是如果本地请求首先完成,我想返回它,然后在完成后返回远程请求。 RxJava 有这样的内置功能吗?
编辑:我想补充一点,getUserItemsRemote 在 Observable 发出时会更新本地数据库,但我认为我不能确保在本地请求完成之前更新数据库,这留下了可能性本地请求将响应陈旧数据。
【问题讨论】:
标签: caching observable rx-java2