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"));
像这样的东西似乎工作,doFinally
和takeUntil
的组合 - 可能其他方式做同样的事情,虽然不确定你的用例,似乎有点奇怪这样做:
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) }