Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin RxJava2:未使用FlatMapiteTable调用onComplete_Kotlin_Rx Java2_Rx Kotlin2 - Fatal编程技术网

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按照我的预期工作!