如何设置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但两者都用于设置你想要执行的线程。但在我的情况下,我希望在我运行测试的同一个线程中执行或结束它
现在看到打印的唯一方法就是阻止并等待执行。
问候。
答案 0 :(得分:1)
您可以使用Observable.toBlocking()
获取BlockingObservable
并使用它来提取测试结果。
答案 1 :(得分:0)
如果你没有指定observeOn
/ subscribeOn
并且没有操作符或Observable更改线程,那么当你subscribe
到observable时它将执行所有处理在订阅期间。