Есть ли обратный вызов, который может быть получен, когда rxjava наконец завершает работу Observable? - PullRequest
1 голос
/ 09 июля 2019

В функции, которая создает родительскую 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

Почему эти результаты выходят?Кроме того, у меня есть оператор, который соответствует тому, что я хочу?

...