RxJava Retry повторяется только при наличии карты, а не плоской карты - PullRequest
0 голосов
/ 08 мая 2019
import rx.Single;

public class RetryTest {
    public static void main(String[] args){
        Single.just(getStr())
        .map(str -> {
            System.out.println(str);
            System.out.println(getNtr().toString());
            return str;

        }).retry(3).subscribe();
    }

    private static String getStr() {
        System.out.println("In First");
        return "Hello";
    }
    private static String getNtr() {
        System.out.println("In First");
        return null;
    }
}

Это дает ожидаемый результат.Он повторяет все пути от getStr () и затем getNtr ().

In First
Hello
In First
Hello
In First
Hello
In First
Hello

И затем выдает исключение.Но когда я меняю карту на flatMap, то повторяется только Single в flatMap (который выдает ошибку).Как я могу заставить его повторить весь сингл?

import rx.Single;

public class RetryTest {
    public static void main(String[] args){
        Single.just(getStr())
        .flatMap(str -> {
            System.out.println(str);
            return Single.error(new Exception());

        }).retry(3).subscribe();
    }

    private static String getStr() {
        System.out.println("In First");
        return "Hello";
    }
    private static String getNtr() {
        System.out.println("In First");
        return null;
    }
}

Вывод:

In First
Hello
Hello
Hello
Hello

Я хочу, чтобы он повторил попытку с первого сингла, а не с сингла, вызвавшего ошибку.Как я могу это сделать?

...