onErrorResume 和 doOnError 的区别

Mel*_*ius 15 spring project-reactor

在 spring 项目反应堆中,onErrorResume和之间有什么区别doOnError?什么时候我应该每个人?

Pra*_*dey 40

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()));
Run Code Online (Sandbox Code Playgroud)

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

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

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