rx-java – 在重试时修改Source Observable – RxJava

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

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

最佳答案 使用延迟.这将允许重新计算ID:

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

Documentation on the defer operator

点赞