onErrorResume 和 doOnError 的区别

Posted

技术标签:

【中文标题】onErrorResume 和 doOnError 的区别【英文标题】:The difference between onErrorResume and doOnError 【发布时间】:2020-01-29 17:53:22 【问题描述】:

在spring project reactor中,onErrorResumedoOnError有什么区别?我什么时候应该每个人?

【问题讨论】:

【参考方案1】:

onErrorResume:当上游发生一些异常时给出一个回退流。

doOnError:副作用运算符。假设您想记录上游发生的错误。

例子:

Mono.just(request)
.flatMap(this::makeHTTPGet)
.doOnError(err -> 
        log.error("Some error occurred while making the POST call",err)
    )
.onErrorResume(err -> Mono.just(getFallbackResponse()));

你看,doOnError 是一个副作用运算符。这就像将温度计插入水管并读取温度。它会影响管道吗?没有。

假设现在管道破裂 - 城市仍然需要取水,对吗?所以我们有一个可以在这种情况下激活的备用管道。 onErrorResume 正是这样做的。

注意:您也可以登录onErrorResume。没有什么能阻止你这样做。

【讨论】:

@MeladBasilius 对你有用吗?如果是,那么请考虑接受它。谢谢。 这个解释太好了!

以上是关于onErrorResume 和 doOnError 的区别的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获 MonoError?

如何从Mono获取实体类型 ?

使用 webflux 处理异常并返回正确的 HTTP 代码

从主题中提取特定字符串格式以进行排序

& 和 && 区别和联系,| 和 || 区别和联系

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等