Rx java rxjava最终关闭Observable时是否可以接收到回调?

Rx java rxjava最终关闭Observable时是否可以接收到回调?,rx-java,rx-java2,Rx Java,Rx Java2,在创建父可观察对象的函数中,我希望在所有子可观察对象完成后执行特定任务 最接近我在官方文档中想要的操作符是doFinally,但它实际显示的结果与我想象的不同。请在下面附上测试代码 @Test fun test() { val observer = TestObserver<Int>() createSingleWithDoFinally() .flatMapCompletable { createCompletable() }

在创建父可观察对象的函数中,我希望在所有子可观察对象完成后执行特定任务

最接近我在官方文档中想要的操作符是doFinally,但它实际显示的结果与我想象的不同。请在下面附上测试代码

@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