如何在重试时更新源可观察数据?
List<String> ids = new ArrayList<>(); // A,B,C
Observable.from(ids)
.retryWhen(errors -> {
return errors
.zipWith(Observable.range(0, 1), (n, i) -> i)
.flatMap(retryCount -> Observable.timer((long) Math.pow(2, retryCount), TimeUnit.MINUTES));
})
.subscribe(....);
现在而不是将// A,B,C作为id传递,如果我想传递一些其他值。我该怎么做?或者这是正确的方法吗?
答案 0 :(得分:1)
使用defer
。这将允许重新计算ids
:
Observable.defer(() -> {
List<String> ids = // compute this somehow
return Observable.from(ids);
}).retryWhen(...
答案 1 :(得分:1)
onErrorResumeNext
。您可能需要一些额外的逻辑来匹配您的用例。错误处理操作符here的文档。
List<String> ids = new ArrayList<>(); // A,B,C
List<String> ids2 = new ArrayList<>(); // D,E,F
Observable.from(ids)
.onErrorResumeNext(throwable -> {
return Observable.from(ids2);
});