订阅主线程

时间:2016-12-14 16:05:55

标签: java-8 rx-java observable

如何设置Observable的异步运算符在主线程中运行而不是在另一个线程中运行。或者至少设置一旦我们完成就在主线程中得到结果。

    @Test
    public void retryWhen() {
        Scheduler scheduler = Schedulers.newThread();
        Single.just("single")
                .map(word -> null)
                .map(Object::toString)
                .retryWhen(ot ->
                        ot.doOnNext(t -> System.out.println("Retry mechanism:" + t))
                                .filter(t -> t instanceof NullPointerException && cont < 5)
                                .flatMap(t -> Observable.timer(100, TimeUnit.MILLISECONDS,scheduler))
                                .doOnNext(t -> cont++)
                                .switchIfEmpty(Observable.error(new NullPointerException())))
                .subscribeOn(scheduler)
                .subscribe(System.out::println, System.out::println);
//        new TestSubscriber()
//                .awaitTerminalEvent(1000, TimeUnit.MILLISECONDS);
    }

我正在尝试使用observerOn和subscribeOn但两者都用于设置你想要执行的线程。但在我的情况下,我希望在我运行测试的同一个线程中执行或结束它

现在看到打印的唯一方法就是阻止并等待执行。

问候。

2 个答案:

答案 0 :(得分:1)

您可以使用Observable.toBlocking()获取BlockingObservable并使用它来提取测试结果。

答案 1 :(得分:0)

如果你没有指定observeOn / subscribeOn并且没有操作符或Observable更改线程,那么当你subscribe到observable时它将执行所有处理在订阅期间