我一直在玩 retrywhen()方法,我注意到,如果您使用 filter()retrywhen()和如果 filter()失败,没有执行回调,甚至没有 oncompleted()。你能告诉我为什么会发生这种情况吗?预先感谢。
工作案例:
Observable.error(new RuntimeException())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retryWhen(errors -> errors
.filter(throwable -> throwable instanceof RuntimeException)
.zipWith(Observable.range(1, 3), (throwable, retryCount) -> {
Log.i("lol", "retry " + retryCount);
return retryCount;
}))
.subscribe(e -> Log.i("lol", "onNext"), throwable -> Log.i("lol", "onError"), () -> Log.i("lol", "onCompleted"));
工作输出:
I: retry 1
I: retry 2
I: retry 3
I: onCompleted
但是,当我用filter(throwable -> throwable instanceof IOException)
更改过滤器时,可观察的可见状态就像在冷冻状态下。没有回电。
Observable.error(new RuntimeException())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retryWhen(errors -> errors
.filter(throwable -> throwable instanceof IOException)
.zipWith(Observable.range(1, 3), (throwable, retryCount) -> {
Log.i("lol", "retry " + retryCount);
return retryCount;
}))
.subscribe(e -> Log.i("lol", "onNext"), throwable -> Log.i("lol", "onError"), () -> Log.i("lol", "onCompleted"));
您不想在retryWhen()
操作员内使用filter()
。而是使用if
语句或switch
语句来确保您对所有情况有完整的覆盖范围。
retryWhen()
的工作方式是它可以创建可观察到的功能。当它以onError()
方法捕获可抛光的方法时,它会散发出可观察到的可观察到的结果并等待结果。如果没有得到结果,例如当售票被过滤时,它将永远等待。