嵌套可完成站点观察者链

问题描述 投票:0回答:1

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

我知道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!
}
kotlin rx-java2
1个回答
1
投票

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!
}
© www.soinside.com 2019 - 2024. All rights reserved.