是否可以避免如果mono.zip中的一个mono引发异常,则所有其他mono立即停止吗?我希望他们正常结束,也许希望通过“ .doOnError”或“ .continueOnError”来处理错误的代码。那是要走的路吗?
问候 贝尔纳多
答案 0 :(得分:0)
是的,有可能。您可以使用Mono.zipDelayError
。从方法名称可以理解,它会延迟来自Monos的错误。如果出现几个Monos错误,则将它们的异常合并。
如果仍然必须获得合并结果,则zipDelayError
不是解决方案。使用zip
运算符,并使用压缩后的Mono或任何上游版本上的后备运算符(如onErrorResume
或retry
)处理错误情况。
答案 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());