避免异常导致立即停止Mono.zip
Avoid exception causes to stop Mono.zip immediately
如果 mono.zip 中的一个单声道抛出异常,是否可以避免所有其他单声道立即停止?我希望它们正常结束,也许可以通过“.doOnError”或“.continueOnError”之类的方式处理错误的。这是一条路吗?
问候
贝尔纳多
是的,这是可能的。您可以使用 Mono.zipDelayError
。正如您从该方法的名称可以理解的那样,它延迟了来自 Monos 的错误。如果几个 Monos 错误,它们的异常被合并。
如果您无论如何都必须获得合并结果,zipDelayError
不是解决方案。使用 zip
运算符并在压缩的 Mono 或任何上游一个上使用 onErrorResume
或 retry
等后备运算符处理错误情况。
我说过我的问题已经得到解答,但现在还没有。下面的例子说明了我的情况:一些单声道会失败,但我也希望结果作为错误。我期待以下关于 运行 完成的代码,但它失败了:
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());
如果 mono.zip 中的一个单声道抛出异常,是否可以避免所有其他单声道立即停止?我希望它们正常结束,也许可以通过“.doOnError”或“.continueOnError”之类的方式处理错误的。这是一条路吗?
问候 贝尔纳多
是的,这是可能的。您可以使用 Mono.zipDelayError
。正如您从该方法的名称可以理解的那样,它延迟了来自 Monos 的错误。如果几个 Monos 错误,它们的异常被合并。
如果您无论如何都必须获得合并结果,zipDelayError
不是解决方案。使用 zip
运算符并在压缩的 Mono 或任何上游一个上使用 onErrorResume
或 retry
等后备运算符处理错误情况。
我说过我的问题已经得到解答,但现在还没有。下面的例子说明了我的情况:一些单声道会失败,但我也希望结果作为错误。我期待以下关于 运行 完成的代码,但它失败了:
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());