Вложенная завершаемая остановка цепочки наблюдателей - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу выполнить Completable в flatMap и "сопоставить" его с нужным мне c значением. Блок подписки никогда не выполняется. Почему?

Я знаю о существовании flatMapCompletable и andThen, но они не решают мою проблему. Этот код также немного упрощен, в моем реальном коде мне нужно применить больше операторов к вложенному Observable (производному от Completable), поэтому мне действительно нужно преобразование в Observable.

disposables += myPublishSubject.withLatestFrom(myObservable).flatMap { (_, result) ->
    myCompletable()
        .toObservable<Unit>()
        .map { result } // Return result of "parent" observable after Completable completes
}.subscribe { result ->
    Timber.i("result: $result") // Not executed!
}

1 Ответ

1 голос
/ 12 февраля 2020

Completables не имеют элементов, поэтому при преобразовании обратно в Observable этот Observable также пуст и поэтому никогда не вызывает map. Используйте andThen(Observable.just(result)),

disposables += myPublishSubject.withLatestFrom(myObservable).flatMap { (_, result) ->
    myCompletable()
        .andThen(Observable.just(result))
}.subscribe { result ->
    Timber.i("result: $result") // Not executed!
}

или конвертируйте Completable обратно в одиночное значение по умолчанию:

disposables += myPublishSubject.withLatestFrom(myObservable)
.flatMapSingle { (_, result) ->
    myCompletable()
        .toSingleDefault(result)
}.subscribe { result ->
    Timber.i("result: $result") // Not executed!
}
...