在创建父级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
为什么会出现这些结果?另外,我是否有一个与我想要的运算符相对应的运算符?