Rx java rxjava最终关闭Observable时是否可以接收到回调?
在创建父可观察对象的函数中,我希望在所有子可观察对象完成后执行特定任务 最接近我在官方文档中想要的操作符是doFinally,但它实际显示的结果与我想象的不同。请在下面附上测试代码Rx java rxjava最终关闭Observable时是否可以接收到回调?,rx-java,rx-java2,Rx Java,Rx Java2,在创建父可观察对象的函数中,我希望在所有子可观察对象完成后执行特定任务 最接近我在官方文档中想要的操作符是doFinally,但它实际显示的结果与我想象的不同。请在下面附上测试代码 @Test fun test() { val observer = TestObserver<Int>() createSingleWithDoFinally() .flatMapCompletable { createCompletable() }
@Test
fun test() {
val observer = TestObserver<Int>()
createSingleWithDoFinally()
.flatMapCompletable { createCompletable() }
.doFinally {
println("Actual Finally")
}
.subscribe(observer)
observer.await()
}
private fun createSingleWithDoFinally(): Single<Int> {
return Single.create<Int> { emitter ->
emitter.onSuccess(1)
}
.doFinally {
println("Expect doFinally")
}
}
private fun createCompletable(): Completable {
println("I Have Some Delay")
return Completable.timer(2L, TimeUnit.SECONDS)
.andThen(Completable.defer {
println("Delay One More Time")
Completable.timer(3L, TimeUnit.SECONDS)
})
}
但是,当我尝试运行代码时,得到的结果与预期的不同
I Have Some Delay
Expect doFinally
Delay One More Time
Actual Finally
为什么会出现这些结果?另外,我是否有一个与我想要的操作符相对应的操作符?doFinally作用于
onSuccess
、onError
或onComplete
。由于flatMap
在代码中onSuccess
时启动一个延迟源,因此最终在单个上执行,但序列的其余部分仍然有效。序列的末尾是最终的订阅
接收上述信号的位置。doFinally作用于成功
、错误
或完成
。由于flatMap
在代码中onSuccess
时启动一个延迟源,因此最终在单个上执行,但序列的其余部分仍然有效。序列的末尾是最终的订阅
接收上述信号的地方。
I Have Some Delay
Expect doFinally
Delay One More Time
Actual Finally