@Lordao

Как выполнить поочередно методы в rxjava?

Есть репозиторий, где инжектится datasource. У этого репозитория есть два метода - loadLocal и loadRemote.
Изначально вызывается loadLocal и в случае того, если в локальной базе данных нет никаких записей, то вызываем метод loadRemote, где данные уже получаем от сервера в видеSingle<List<Item>>. Затем мы должны вернуть уже Flowable<List<Item>> из локальной БД после того как мы уже добавили определенные данные от сервера. Каким образом грамотно выполнять поочередность, чтобы после того как получили Single<List<Item>> от сервера из него вытянуть все необходимые данные, закинуть в БД и уже вернуть список из самой БД?

class ItemRepository @Inject constructor(private val dataSource: DataSource) {

    fun loadLocal(forceRemote: Boolean): Flowable<List<Item>> {
        return if (forceRemote) {
            loadRemote()
        } else {
            dataSource.loadLocal(false).filter { !it.isEmpty() }.switchIfEmpty(loadRemote())
        }
    }

    private fun loadRemote(): Flowable<List<Item>> {
        dataSource.loadRemote(false).map { list ->
            list.map { item ->

                /*code*/
                /*Вытягиваем данные из объекта и закидываем в разные таблицы БД*/
                
                with(dataSource) {
                    addItem(item)
                    addDetails(listDetails)
                    addItemDetails(listItemDetails)
                }
            }
        }
        return dataSource.loadLocal(false)
    }
}
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Kotlin
Android developer at Yandex
Все методы бд должны возвращать Completable
ds.loadRemote()
    . switchMap{
          ds.add1(...)
             .andThen(ds.add2(...))
             .andThen(ds.add3(...))
             .andThen(ds.loadLocal())
    }

Примерно как-то так.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы