android - 当请求获取远程数据时出现错误时,RxJava2 concatArrayEagerDelayError 不会加载缓存数据
问题描述
我在 Android 项目中使用以下代码从数据库(缓存)和 API 请求中加载数据:
Observable.concatArrayEagerDelayError(
getDatabaseData(),
getRemoteData()
).debounce(400, TimeUnit.MILLISECONDS)
从getDatabaseData()
和getRemoteData()
都返回Observable<MyObj>
它看起来像预期的那样工作,除非在尝试获取远程数据时发生错误。在订阅者上,我只收到 onError 回调,因此无法处理和显示缓存的数据。
我尝试更改为concatArray
and concat
,但它有同样的问题。
这个问题有什么可能的解决方案吗?
解决方案
问题是错误会推出数据库值,debounce
因此它永远不会被传递。如果一个人实现了流程,那么错误通知也会做同样的事情。
我能想到的最好的办法是将错误转移到去抖动计时器之外,这样你至少会得到后续的项目:
Observable.concatArrayEagerDelayError(
Observable.just(1).delay(100, TimeUnit.MILLISECONDS),
Observable.<Integer>error(new IOException()).delay(200, TimeUnit.MILLISECONDS, true)
)
.onErrorResumeNext((Function<Throwable, Observable<Integer>>)(error ->
Observable.<Integer>error(error).delay(500, TimeUnit.MILLISECONDS, true))
)
.doOnEach(System.out::println)
.debounce(400, TimeUnit.MILLISECONDS)
.blockingSubscribe(
System.out::println,
Throwable::printStackTrace
);
推荐阅读
- c++ - 对象成员变量在函数中更新但不持久
- kubernetes - Kubernetes Helm 中的常见依赖
- git - 如何修复 GIT 中损坏的存储库
- azure - Azure Functions 2.x 中带有查询字符串的 sqlQuery?
- mysql - 是否可以使用重复数据加入 2 个视图?
- c# - 反序列化未填充我的变量/response.data 显示 null
- python - Django:返回正确的分页器页面
- android - android上的React native在获取API JSON时提供空列表
- r - 如何计算跨列字数的加权总和?
- php - 如何使用 htaccess 保护文件夹或目录