在我们的项目中,如果发生不良情况,我们会进行某种类型的回退,并由doOnError处理。我唯一关心的是,可能未正确使用doOnError运算符。因此,让我们看下一个示例:

callService1()
.flatMap(service1Response -> {
  //process service1Response
})
.doOnError(callService2.subscribe())


当流到达doOnError时,我们正在调用另一个服务。

在doOnError中,我们必须手动预订由callService2检索的Mono,以便执行代码,此外,如果在doOnError中引发错误,则我们的GlobalErrorHandler不会捕获该错误。

在这种情况下,我们是否应该重新考虑错误处理?我真的不想手动订阅发布者。你怎么看 ?提前谢谢。

最佳答案

如果发生错误,可以使用onErrorResume运算符返回另一个Mono。有关其他相关运算符,请参见reactor operator guide

callService1()
.flatMap(service1Response -> {
  //process service1Response
})
.onErrorResume(err -> callService2())

10-04 18:06