@Lordao

Как выполнить код в doOnNext в rxjava?

Из dataSource получаю список в виде Flowable<List<Item>> от сервера. После этого мне необходимо каждый элемент добавить в локальный список cashes и затем добавить в БД. Но код во втором doOnNext не выполняется.

return remoteDataSource.loadItem(true).doOnNext {
            Log.d("Log", it.toString())
            caches.clear()
            localDataSource.clearData()
        }.take(1).flatMap { list -> Flowable.fromIterable(list) }.doOnNext {
            Log.d("Log", it.title)
            caches.add(it)
            localDataSource.addItem(it)
        }.toList().toFlowable()
  • Вопрос задан
  • 412 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Kotlin
Android developer at Yandex
Не нужно так делать в Rx. В doOnNext не должно быть настолько мощных сайд-эффектов. В лог написать - ок, в бд сходить - не ок. Нужно завернуть clear/add в Completable.
remoteDataSource.loadItem(true)
    .flatMap {
         cache.clear().andThen(Observable.just(it))
    }
    .flatMap { list ->
         Observable.fromIterable(list)
            .flatMapCompletable { cache.add(it) }
            .andThen(Observable.just(list))
     }


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

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

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