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

问题描述 投票:0回答:1
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"));
rx-java rx-java2
1个回答
0
投票

像这样的东西似乎工作,doFinallytakeUntil的组合 - 可能其他方式做同样的事情,虽然不确定你的用例,似乎有点奇怪这样做:

    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) }
© www.soinside.com 2019 - 2024. All rights reserved.