重试时修改源可观察到-RxJava

Bha*_*ath 5 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(....);
Run Code Online (Sandbox Code Playgroud)

现在,如果我想传递其他值,而不是将// A,B,C作为id传递。我该怎么做?还是这是正确的方法?

drh*_*rhr 3

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

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

关于 defer 操作符的文档