使用RxJava 2.2.8
:
Observable.fromCallable(() -> "Some data")
.subscribe(
s -> System.out.println(s),
e -> System.err.println(e),
() -> System.out.println("Completed")
);
输出
Some data
Completed
我的问题是为什么onComplete
永远不会被以下人员称呼?
Observable.interval(1, TimeUnit.SECONDS)
.switchMap(t -> Observable.fromCallable(() -> "Some data"))
.subscribe(
s -> System.out.println(s),
e -> System.err.println(e),
() -> System.out.println("Completed")
);
输出
Some data
Some data
Some data
...
我知道Observable.interval
将创建一个永无止境的流,因此没有onComplete
。我对switchMap
的理解是,它返回一个observable,它触发由内部Observable产生的事件(取消所有暂挂和展平),在这种情况下为Observable.fromCallable
。
现在,这个“内部”可观察对象确实有一个确定的终点(与外部可观察对象不同),那么为什么onComplete
不会在此内部可观察对象上被调用?
为什么输出不是这样?
Some data
Completed
Some data
Completed
Some data
Completed
...
答案 0 :(得分:0)
如果两个上游都完成了结果ObservableSource ObservableSource和最后一个内部ObservableSource
由于上游ObservableSource 是无限流,因此生成的 Observable 将不会完成。
还要注意,根据observable contract,onComplete表示可观察对象已终止,并且将来将不再发射任何其他项,因此无论您采用何种实现方式,您都不会看到“已完成”和其他一些项