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();
}