避免引起异常的原因以立即停止Mono.zip

时间:2019-05-18 21:07:57

标签: project-reactor

是否可以避免如果mono.zip中的一个mono引发异常,则所有其他mono立即停止吗?我希望他们正常结束,也许希望通过“ .doOnError”或“ .continueOnError”来处理错误的代码。那是要走的路吗?

问候 贝尔纳多

2 个答案:

答案 0 :(得分:0)

是的,有可能。您可以使用Mono.zipDelayError。从方法名称可以理解,它会延迟来自Monos的错误。如果出现几个Monos错误,则将它们的异常合并。

如果仍然必须获得合并结果,则zipDelayError不是解决方案。使用zip运算符,并使用压缩后的Mono或任何上游版本上的后备运算符(如onErrorResumeretry)处理错误情况。

答案 1 :(得分:0)

我说我的问题已经回答,但是还没有。以下示例说明了我的情况:某些单声道将失败,但我也希望将结果作为错误。我希望下面的代码可以运行完成,但是失败了:

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());