我有一个Observable
应用于我的flatMap
运算符。当第二个完成时,是否可以使原始Observable
完整?
这是代码。
Observable.never<Int>()
.startWith(0)
.doOnComplete { println("Completed") } // Not called.
.flatMap { Observable.fromArray(1, 2, 3, 4, 5) /* Completes after 5 */ }
.subscribe(::println)
输出为:
1
2
3
4
5
我正在尝试实现以下输出:
1
2
3
4
5
Completed
答案 0 :(得分:1)
您可以使用运算符materialize
,它将帮助您获取有关flatMap
内部正在发生什么的信息。然后,当您收到onComplete
通知(仅接收onNext
通知)时,可以在上游进行处置。
Observable.<Integer>never()
.startWith(0)
.flatMap(integer -> Observable.range(1, 5)
.materialize())
.takeWhile(notification -> notification.isOnNext())
.map(notification -> notification.getValue())
.doOnComplete(() -> System.out.println("Completed"))
.subscribe(integer -> System.out.println(integer));
结果
1
2
3
4
5
Completed