上游onComplete如何传播到可映射的下游可观察下游?

时间:2018-09-07 16:14:57

标签: rx-java rx-java2

observable1
 .filter { ... }
 .flatMap { observable2 }
 .doFinally {  }

如果我的上游observable1完成,observable2仍然在争吵,我的doFinally没有被呼叫

当上游完成时,如何使Observable2完成?

//工作示例

Observable.just(1)
                .doOnComplete(() -> Log.d("Default", "upstream completed"))
                .flatMap(__ -> Observable.interval(0, 1, TimeUnit.SECONDS))
                .subscribe(
                        __ -> Log.d("Default", "onNext"),
                        t -> Log.d("Default", "onError"),
                        () -> Log.d("Default", "onComplete"));

1 个答案:

答案 0 :(得分:0)

doFinallytakeUntil的组合似乎可以正常工作-可能是通过其他方式来做同一件事,尽管不确定您的用例,但这样做似乎有些奇怪:< / p>

    var boolean = false

    Observable.just(1, 2, 3, 4, 5, 6, 7, 8)
            .subscribeOn(Schedulers.from(schedulerA))
            .doFinally { println("Do Finally before flatMap"); boolean = true }
            .observeOn(Schedulers.from(schedulerB))
            .flatMap { Observable.just(it) }
            .takeUntil { boolean }
            .subscribe { println(it) }