【发布时间】:2017-10-25 16:33:10
【问题描述】:
我对 rxjava 有一个非常具体的问题或误解,希望有人能提供帮助。
我正在运行 rxjava 2.1.5 并且有以下代码 sn-p:
public static void main(String[] args) {
final Observable<Object> observable = Observable.create(emitter -> {
// Code ...
});
observable.subscribeOn(Schedulers.io())
.retryWhen(error -> {
System.out.println("retryWhen");
return error.retry();
}).subscribe(next -> System.out.println("subscribeNext"),
error -> System.out.println("subscribeError"));
}
执行后,程序打印:
retryWhen
Process finished with exit code 0
我的问题,我不明白的是:为什么在订阅 Observable 时立即调用 retryWhen? observable 什么都不做。
我想要的是在发射器上调用 onError 时调用 retryWhen。我是否误解了 rx 的工作原理?
谢谢!
添加新的sn-p:
public static void main(String[] args) throws InterruptedException {
final Observable<Object> observable = Observable.create(emitter -> {
emitter.onNext("next");
emitter.onComplete();
});
final CountDownLatch latch = new CountDownLatch(1);
observable.subscribeOn(Schedulers.io())
.doOnError(error -> System.out.println("doOnError: " + error.getMessage()))
.retryWhen(error -> {
System.out.println("retryWhen: " + error.toString());
return error.retry();
}).subscribe(next -> System.out.println("subscribeNext"),
error -> System.out.println("subscribeError"),
() -> latch.countDown());
latch.await();
}
发射器 onNext 和完成被调用。 DoOnError 永远不会被调用。输出是:
retryWhen:io.reactivex.subjects.SerializedSubject@35fb3008 订阅下一个
进程以退出代码 0 结束
【问题讨论】: