Избегайте исключительных причин, чтобы немедленно остановить Mono.zip - PullRequest
1 голос
/ 19 мая 2019

Можно ли избежать того, что если один моно в файле mono.zip выдает исключение, все остальные моно немедленно останавливаются?Я хочу, чтобы они нормально заканчивались и, возможно, обрабатывали ошибочные значения, например, «.doOnError» или «.continueOnError».Это способ пойти?

С уважением Бернадо

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Я сказал, что на мой вопрос ответили, но пока нет. В следующем примере описывается мой случай: некоторые моно не получатся, но я хочу, чтобы результат также был ошибкой. я ожидал, что следующий код будет выполнен до конца, но не получится:

Mono<String> error = Mono.error(new RuntimeException());

    error = error.onErrorResume(throwable -> Mono.just("hell0"));

    Mono<String> test = Mono.just("test");
    Mono<String> test1 = Mono.just("test1");
    Mono<String> test2 = Mono.just("test2");

    List<Mono<String>> monolist = new ArrayList<>();
    monolist.add(test);
    monolist.add(test1);
    monolist.add(test2);
    monolist.add(error);
    Mono<Long> zipDelayError = Mono.zipDelayError(monolist, arrayObj -> Arrays.stream(arrayObj).count());

    System.out.println(zipDelayError.block());
0 голосов
/ 19 мая 2019

Да, это возможно. Вы можете использовать Mono.zipDelayError. Как вы можете понять из названия метода, он задерживает ошибки от Monos. Если несколько ошибок Monos, их исключения объединяются.

Если вам все равно нужно получить комбинированный результат, zipDelayError не является решением. Используйте оператор zip и обработайте ошибку, используя резервный оператор, такой как onErrorResume или retry на молнии Mono или любой восходящий.

...