RxJava2 concatArrayEagerDelayError не загружает кэшированные данные, когда возникает ошибка по запросу для получения удаленных данных - PullRequest
0 голосов
/ 31 января 2020

Я использую приведенный ниже код в проекте Android для загрузки данных из базы данных (кеша) и из запроса API:

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

Оба возврата из getDatabaseData() и getRemoteData() являются Observable<MyObj>

Похоже, что работает должным образом, за исключением случаев, когда возникает ошибка при попытке получить удаленные данные. На подписчике я получаю только обратный вызов onError, поэтому кэшированные данные недоступны для обработки и отображения.

Я попытался изменить на concatArray и concat, но у него та же проблема.

Любое возможное решение этой проблемы?

1 Ответ

0 голосов
/ 31 января 2020

Проблема заключается в том, что ошибка выведет sh значение базы данных в 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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...