嵌套可替换停止观察器链



我想在flatMap中执行一个Completable并将其"映射"到我需要的特定值。订阅块永远不会执行。为什么?

我知道flatMapCompletableandThen的存在,但这些并不能解决我的问题。这段代码也简化了一点,在我的真实代码中我需要对嵌套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!
}

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!
}

最新更新