无法测试rxjava的合并运算符

时间:2017-01-19 08:32:45

标签: rx-java

我想使用:

使用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

那么,为什么?

1 个答案:

答案 0 :(得分:2)

因为merge以同步方式订阅Observable。由于第一个Observable没有明确地将工作移动到后台线程,create(...)的主体也会同步执行。

这意味着订阅o1时,必须先完成create(...)调用中的正文,然后才能订阅下一个observable。

明确使用subscribeOn(Schedulers.computation())在后​​台运行可观察对象可以解决问题。

有关计划程序的更多信息,请参阅:http://reactivex.io/documentation/scheduler.html