Один concatArrayEager не подписывается на все источники - PullRequest
0 голосов
/ 01 февраля 2019

Я пишу некоторую логику хранилища для приложения Android, у меня есть эта логика для извлечения данных из базы данных и обновления базы данных данными из API сразу после этого.

   fun fetchData(): Single<Data> {
    return Single.concatArrayEager(
            fetchFromDb(),
            fetchFromApi())
            .firstOrError()
}

Кстати, база данных - Комнатаи API это модернизация.Теперь происходит то, что комната излучает почти мгновенно, но по какой-то причине запрос API не запускается - второй Single не запускается.

Я прочитал документацию по нетерпеливому оператору и не уверен, что это правильное поведение.Я даже пытался отложить выборку из базы данных примерно на 20 миллисекунд, что привело к тому, что второй сингл фактически сработал

1 Ответ

0 голосов
/ 01 февраля 2019

concatArrayEager должен подписаться на все Observables.Но на самом деле ваш вызов API может занять некоторое время.Это может занять больше времени, чем ваш вызов БД должен вернуть.

Теперь мы видим эффект firstOrError.Когда получено первое значение, поток прекращается, и все активные или ожидающие подписки объединения будут отменены.Также результат API никогда не будет использоваться.

...