В функции, которая создает родительскую 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
Почему эти результаты выходят?Кроме того, у меня есть оператор, который соответствует тому, что я хочу?