kotlin - 当 flatMap 内部完成时,使原始 Observable 完成
问题描述
我有一个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
解决方案
您可以使用运算符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
推荐阅读
- webpack - webpack 模块解析失败:意外字符 '�' (1:0)
- r - 将矩阵转换为栅格时输出错误
- r - 将分层数据连接到 R 中的另一个表
- ruby - .click 不适用于 Safari 浏览器 iframe 内的元素
- javascript - 如何找出 WebView 不显示内容的原因?
- javascript - 在等待 5 mint 每 5 秒写入一个文件时
- node.js - 在事务中更新多个文档的正确方法
- angular - 构建时地址未知时如何确定服务器WebSocket url?
- python - 在Python中删除包含NaN的行之前和之后的行?
- django - 如何使用 django 查询在 clean 函数中运行验证错误?