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

时间:2019-07-09 08:41:35

标签: rx-java rx-java2

在创建父级Observable的函数中,我想在所有子级Observable完成后执行某些任务。

最接近我在正式文档中想要的运算符是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
Delay One More Time
Expect doFinally
Actual Finally

但是,当我尝试运行代码时,得到的结果却与预期不同。

I Have Some Delay
Expect doFinally
Delay One More Time
Actual Finally

为什么会出现这些结果?另外,我是否有一个与我想要的运算符相对应的运算符?

0 个答案:

没有答案