Nested Completable 停止观察者链
Nested Completable stops observer chain
我想在 flatMap
和 "map" 中执行一个 Completable
到我需要的特定值。永远不会执行订阅块。为什么?
我知道 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!
}
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!
}
我想在 flatMap
和 "map" 中执行一个 Completable
到我需要的特定值。永远不会执行订阅块。为什么?
我知道 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!
}
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!
}