RxJava2:未使用flatMapIterable调用onComplete

时间:2017-10-05 15:47:36

标签: kotlin rx-java2 rx-kotlin2

以下是一小段代码:

    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()方法。

1 个答案:

答案 0 :(得分:3)

除非BehaviorSubject被调用,否则表单中的onComplete是无限来源。因此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") }
       )