Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Rx java 在RxJava中,我可以';不要从平面图中发出不完整的图像_Rx Java - Fatal编程技术网

Rx java 在RxJava中,我可以';不要从平面图中发出不完整的图像

Rx java 在RxJava中,我可以';不要从平面图中发出不完整的图像,rx-java,Rx Java,我的问题是,当我使用平面图时,我的可观察链不会终止 我把我的例子归结为: int count = Observable.just(1,2,3) .flatMap(s -> Observable.<Integer>create(subscr-> { subscr.onNext(s); if(s>2) { subscr.onCompleted(); }

我的问题是,当我使用平面图时,我的可观察链不会终止

我把我的例子归结为:

int count = Observable.just(1,2,3)
        .flatMap(s -> Observable.<Integer>create(subscr-> {
            subscr.onNext(s);
            if(s>2) {
                subscr.onCompleted();
            }
        }))
        .doOnEach(a->System.err.println(a.getKind()+" -> "+a.toString()))
        .count()
        .toBlocking()
        .first();
    System.err.println("Count: "+count);
(然后继续挂起)

如果删除flatMap操作符:

int count = Observable.just(1,2,3)
        .doOnEach(a->System.err.println(a.getKind()+" -> "+a.toString()))
        .count()
        .toBlocking()
        .first();
System.err.println("Count: "+count);
。。。它完全按照预期工作:

CREATED!
OnNext -> [rx.Notification@e3598bd9 OnNext 1]
OnNext -> [rx.Notification@e3598bda OnNext 2]
OnNext -> [rx.Notification@e3598bdb OnNext 3]
OnCompleted -> [rx.Notification@3834d63f OnCompleted]
Count: 3
我猜我做错了什么(我无法想象在这样一个基本场景中会出现bug),但我看不到


感谢您的帮助。。。(我使用的是RxJava 1.1.0)

问题如下:

        if(s>2) {
            subscr.onCompleted();
        }

s==1
s==2
中的
可观察的
s不会发出
onCompleted
。由于
flatMap
仅在所有
可观察的
完成时发出
onCompleted
,因此在您的情况下,它不会发出
onCompleted

aaah,我必须完成每个flatMap调用,然后它就会完成。这就解释了。我也陷入了这个问题。FlatMap文档解释了发生这种情况的原因:FlatMap操作符通过将您指定的函数应用于源可观察对象发出的每个项目来转换可观察对象,其中该函数返回一个自身发出项目的可观察对象。FlatMap然后合并这些产生的可见光的发射,以其自身的顺序发射这些合并的结果。”“因为FlatMap只在所有可见光完成时发射未完成”,提示+1,救了我的命!
        if(s>2) {
            subscr.onCompleted();
        }