RxJava / Kotlin Наблюдаемая цепочка вызовов методов - как завершить? - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу реализовать метод, чтобы отредактировать заметку, сохранить ее в локальной базе данных (кеше) и затем отправить на сервер в виде запроса POST.Я изучаю RxJava, и я хотел создать Observable из заметки, а затем применить к ней преобразования, например сопоставить ее с моделью Entity и сохранить.Проблема в том, что мой метод возвращает Completable, а эта цепочка возвращает Observable<Completable>.Как развернуть Completable из этого Observable, который я использовал только для запуска RxJava.Каждый editNote() метод возвращает Completable.

 override fun editNote(note: Note): Completable {
    return Observable.just(note)
        .map { mapper.mapToEntity(it) }
        .map { noteEntity ->
            factory.getCacheDataStore().editNote(noteEntity)
                .andThen { factory.getRemoteDataStore().editNote(noteEntity) }
        }
}

======================================================

ОБНОВЛЕНИЕ

Наконец мне удалось найти "решение", но яЯ не уверен, что это правильно: -)

override fun editNote(note: Note): Completable {
    return Observable.just(note)
        .map { mapper.mapToEntity(it) }
        .flatMapCompletable { noteEntity ->
            factory.getCacheDataStore().editNote(noteEntity)
                .andThen { factory.getRemoteDataStore().editNote(noteEntity) }
        }
}

1 Ответ

0 голосов
/ 08 декабря 2018

Вы ищете flatMapCompletable вместо map, потому что map просто перехватывает поток и отображает выбросы другого типа, в то время как 'flatMap' (или его братья и сестры) из документов:

Преобразуйте предметы, испускаемые Обсерваторией, в Наблюдаемые, затем сгладьте выбросы от них в единую Наблюдаемую.

Вы можете увидеть ее мраморную диаграмму в Здесь

...