在重试时修改Source Observable - RxJava

时间:2016-10-24 04:23:00

标签: rx-java

如何在重试时更新源可观察数据?

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传递,如果我想传递一些其他值。我该怎么做?或者这是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

使用defer。这将允许重新计算ids

Observable.defer(() -> {
    List<String> ids = // compute this somehow
    return Observable.from(ids);
}).retryWhen(...

Documentation on the defer operator

答案 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);
        });