RxJava2:onComplete不用flatMapIterable调用
这是简短的代码片段:
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()
方法。
除非调用onComplete
否则BehaviorSubject
的形式是无限的。 因此, flatMapIterable
不会完成,你的onComplete
处理程序永远不会被调用。
所以要么完成BehaviorSubject
:
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") } ) subject.onComplete() // <-----------------------------------------------------
或者你至多拿一个项目
val subject = BehaviorSubject.createDefault(emptyList<Int>()) subject.onNext(Arrays.asList(1, 2, 3)) subject.take(1) // <---------------------------------------------------------- .flatMapIterable { list: List<Int> -> list } .subscribeBy( onNext = { l("on next", it) }, onComplete = { l("on complete") } )