为了使数据可以离线查看,我有一个数据层,首先从数据库请求数据,然后再进行网络调用以从API获取数据(并将其存储到数据库中)。
例如,如果我想按用户ID获取回收分数:
数据层:
数据层:
class RecycleScoreRepository{
fun getRecycleScoresByUserId(userId: Int): Observable<RecycleScores> {
return Observable.concatArray(
getRecycleScoresFromDb(userId),
getRecycleScoresFromApi(userId))}
}
object RepositoryManager {
...
fun getRecycleScoresByUserId(userId: Int): Observable<RecycleScores> {
return recycleScoreRepository.getRecycleScoresByUserId(userId)
//Drop DB data if we can fetch item fast enough from the API to avoid UI flickers
.debounce(400, TimeUnit.MILLISECONDS)} ...
主持人:
RepositoryManager.getRecycleScoresByUserId(userId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
// do something on success
}, {
// do something on error
})
我的Presenter正在订阅Repository以获取getRecycleScoresByUserId。我使用防抖运算符来确保在API调用足够快的情况下,不会将返回的值设置两次以防止UI闪烁。但是现在的问题是,当数据库成功返回一些recycleScores但由于某种原因api请求响应错误时,presenter中的订阅者仅收到错误而不是来自数据库的可观察值。
我如何确保订阅者接收到数据库的可观察值,并在api调用返回错误时不被防抖?