RxJava2 concatArrayEagerDelayError在请求获取远程数据时引发错误时不加载缓存的数据

问题描述 投票:0回答:1

我正在Android项目中使用以下代码从数据库(缓存)和API请求中加载数据:

Observable.concatArrayEagerDelayError(
    getDatabaseData(),
    getRemoteData()
).debounce(400, TimeUnit.MILLISECONDS)

getDatabaseData()getRemoteData()的返回均为Observable<MyObj>

看起来正在按预期方式工作,除了在尝试获取远程数据时发生错误时。在订阅服务器上,我仅收到onError回调,因此无法处理和显示缓存的数据。

我尝试更改为concatArrayconcat,但是存在相同的问题。

是否有可能解决此问题?

android kotlin retrofit2 rx-java2 android-room
1个回答
0
投票

问题是该错误将推出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
);
© www.soinside.com 2019 - 2024. All rights reserved.