避免异常导致立即停止Mono.zip

Avoid exception causes to stop Mono.zip immediately

如果 mono.zip 中的一个单声道抛出异常,是否可以避免所有其他单声道立即停止?我希望它们正常结束,也许可以通过“.doOnError”或“.continueOnError”之类的方式处理错误的。这是一条路吗?

问候 贝尔纳多

是的,这是可能的。您可以使用 Mono.zipDelayError。正如您从该方法的名称可以理解的那样,它延迟了来自 Monos 的错误。如果几个 Monos 错误,它们的异常被合并。

如果您无论如何都必须获得合并结果,zipDelayError 不是解决方案。使用 zip 运算符并在压缩的 Mono 或任何上游一个上使用 onErrorResumeretry 等后备运算符处理错误情况。

我说过我的问题已经得到解答,但现在还没有。下面的例子说明了我的情况:一些单声道会失败,但我也希望结果作为错误。我期待以下关于 运行 完成的代码,但它失败了:

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