我想使用:
使用rxjava 1测试merge
运算符
Observable<Object> o1 = Observable.create((t) -> {
t.onNext("1");
try {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
t.onNext("2");
t.onCompleted();
});
Observable<Object> o2 = Observable.create((t) -> {
t.onNext("a");
t.onNext("b");
t.onCompleted();
});
o1.mergeWith(o2).subscribe(System.out::println);
我希望输出为:1ab2
,但实际值为12ab
。
那么,为什么?
答案 0 :(得分:2)
因为merge
以同步方式订阅Observable。由于第一个Observable没有明确地将工作移动到后台线程,create(...)
的主体也会同步执行。
这意味着订阅o1
时,必须先完成create(...)
调用中的正文,然后才能订阅下一个observable。
明确使用subscribeOn(Schedulers.computation())
在后台运行可观察对象可以解决问题。
有关计划程序的更多信息,请参阅:http://reactivex.io/documentation/scheduler.html