Kotlin RxJava2:未使用FlatMapiteTable调用onComplete
以下是简短的代码片段:Kotlin RxJava2:未使用FlatMapiteTable调用onComplete,kotlin,rx-java2,rx-kotlin2,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
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是一个无限源。因此,FlatMapiteTable将不会完成,并且您的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") }
)
除非对其调用onComplete,否则您拥有的形式为的BehaviorSubject是一个无限源。因此,FlatMapiteTable将不会完成,并且您的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") }
)
为什么要使用行为主体?您必须显式地调用onComplete。为什么在这里调用onComplete?您的主题尚未完成发射项目-您仍然可以使用项目对其调用onNext。@zsmb13那么调用onCompete与主题中的相同吗?我以为它会被FlatMapiteTable中的observable重新定义。FlatMapiteTable只会根据它自己接收的事件发出事件。在onComplete的情况下,当链接到的内容完成时,它将立即完成。@zsmb13谢谢您的回答。我尝试调用subject上的onComplete方法,但并没有调用onNext,只调用订阅者的onComplete。如何按照我的经验进行操作,即通过调用onNext和onComplete订户的flatMap iterable?为什么要使用BehaviorSubject?您必须显式地调用onComplete。为什么在这里调用onComplete?您的主题尚未完成发射项目-您仍然可以使用项目对其调用onNext。@zsmb13那么调用onCompete与主题中的相同吗?我以为它会被FlatMapiteTable中的observable重新定义。FlatMapiteTable只会根据它自己接收的事件发出事件。在onComplete的情况下,当链接到的内容完成时,它将立即完成。@zsmb13谢谢您的回答。我尝试调用subject上的onComplete方法,但并没有调用onNext,只调用订阅者的onComplete。如何按照我的经验操作,即flatMap iterable调用onNext和onComplete订阅服务器?@akarnold感谢您的回答,但当我完成BehaviorSubject时,新订阅服务器将不会像我预期的那样接收onNext事件。在这种情况下,请使用ReplaySubject或AsyncSubject。@akarnold谢谢您。AsyncSubject按照我的预期工作@感谢您的回答,但当我完成BehaviorSubject时,新订户将不会像我预期的那样收到下一个事件。在这种情况下,请使用ReplaySubject或AsyncSubject。@akarnold谢谢您。AsyncSubject按照我的预期工作!