Я почти уверен, что Single
повторяется, но вызов getA()
не выполняется, поскольку он не является частью цепочки RxJava.Вы вызываете его один раз, и, таким образом, распечатка происходит только один раз.
Чтобы увидеть повторную попытку полностью, оберните содержимое метода в defer
:
private static Single<String> getA() {
return Single.defer(() -> {
System.out.println("getA()");
return Single.error(new Exception("a"));
});
}
Также, если ваши требованияпроизнесите A, а затем B + C вместе, поэтому следующая последовательность более уместна:
getA().retry(3)
.flatMap(a -> Single.zip(
getB().onErrorResumeNext(Single.just("defaultB")),
getC(),
(b, c) -> a
))
.subscribe(a -> {
System.out.println(a);
}, error -> {
System.out.println(error.getMessage());
});