RxJava Retry仅在有地图而不是flatMap时重试

时间:2019-05-07 22:45:33

标签: java java-ee rx-java reactive-programming rx-java2

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时,仅重试flatMap中的Single(这会引发错误)。我该如何重试整个单曲?

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

我希望它从第一张单曲中重试,而不是引发错误的单曲。我该如何实现?

0 个答案:

没有答案