Reactor 错误处理文档 ( https://projectreactor.io/docs/core/3.4.10/reference/index.html#error.handling ) 指出错误处理运算符不会让原始序列继续。
在了解错误处理运算符之前,您必须记住,反应序列中的任何错误都是终止事件。即使使用错误处理运算符,它也不会让原始序列继续。相反,它将 onError 信号转换为新序列(后备序列)的开始。换句话说,它替换了其上游终止的序列。
但 onErrorContinue 的 javadoc 声明如下(https://projectreactor.io/docs/core/3.4.10/api/index.html) -
通过从序列中删除有罪的元素并继续处理后续元素,让上游兼容运算符从错误中恢复。
onErrorContinue 不被视为“错误处理运算符”吗?
它似乎确实允许原始序列继续 -
Flux.range(1, 5)
.map(i -> {
if (i == 3) {
throw new RuntimeException("Forcing exception for " + i);
}
return i;
})
.doOnNext(i -> System.out.println(i))
.onErrorContinue((throwable, o) -> System.err.println("Error while processing " + o + " - " + throwable.getMessage()))
.subscribe();
Run Code Online (Sandbox Code Playgroud)
结果(删除了 3 个但继续后续元素)
1
2
4
5
Error while processing 3 - Forcing exception for 3
Process …Run Code Online (Sandbox Code Playgroud)