我正在Android项目中使用以下代码从数据库(缓存)和API请求中加载数据:
Observable.concatArrayEagerDelayError(
getDatabaseData(),
getRemoteData()
).debounce(400, TimeUnit.MILLISECONDS)
getDatabaseData()
和getRemoteData()
的返回均为Observable<MyObj>
看起来正在按预期方式工作,除了在尝试获取远程数据时发生错误时。在订阅服务器上,我仅收到onError回调,因此无法处理和显示缓存的数据。
我尝试更改为concatArray
和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
);