【发布时间】:2017-10-06 05:26:58
【问题描述】:
这里是简短的 sn-p 代码:
val subject = BehaviorSubject.createDefault(emptyList<Int>())
subject.onNext(Arrays.asList(1, 2, 3))
subject.flatMapIterable { list: List<Int> -> list }
.subscribeBy(
onNext = { l("on next", it) },
onComplete = { l("on complete") }
)
为什么onComplete 不在这里打电话?我应该怎么做才能处理这段代码?因为在原始代码中我不能使用.toList() 方法。
【问题讨论】:
-
你为什么使用
BehaviorSubject?你必须明确地调用onComplete()。 -
为什么会在这里调用
onComplete?您的主题尚未完成发射项目 - 您仍然可以使用项目调用onNext。 -
@zsmb13 那么 onCompete 的调用和主题中的一样吗?我认为它会被 flatMapIterable 中的 observable 重新定义。
-
flatMapIterable只会根据它自己收到的事件发出事件。在onComplete的情况下,它会在它链接到的任何内容完成时完成。 -
@zsmb13 感谢您的回答。我尝试在主题上调用
onComplete方法,但没有调用onNext,只有订阅者的onComplete。我如何按预期工作,即 flatMap 可通过调用订阅者的onNext和onComplete进行迭代?
标签: kotlin rx-java2 rx-kotlin2