首页 > 解决方案 > onErrorMap 和 onErrorContinue

问题描述

我正在学习使用 Flux/Mono 进行错误处理并遇到这个问题:

Flux.just("AAA", "BBB", "AAA", "CCC")
    .map(s -> {
        if (s.equals("AAA")) {
            throw new IllegalArgumentException();
        }
        return s;
    })
    .map(s -> s + "-LOL")
    .onErrorMap(IllegalArgumentException.class, cause -> new IllegalStateException())
    .onErrorContinue(IllegalArgumentException.class, (e, a) -> System.out.println("Found IllegalArgumentException" + e))
    .onErrorContinue(IllegalStateException.class, (e, a) -> System.out.println("Found IllegalStateException" + e))
    .collectList()
    .block();

我想要做的是将错误异常映射到另一个异常,然后我想以特定方式处理它。

在我的代码中,我看到它onErrorContinue仅针对 触发IllegalArgumentException,但我不明白为什么 - 我刚刚将错误映射到IllegalStateException

标签: javaspring-webfluxproject-reactor

解决方案


如果您从反应式编程开始,我敦促您避免使用onErrorContinue. 这是一个非常具有误导性的运算符,适用于非常了解运算符内部工作的高级用户。我很遗憾每次提到它时都添加它,并且正在考虑将它从公共 API 中隐藏得更多,因为它很容易被认为是简单的,例如。onErrorResume.

考虑onErrorReturn, onErrorResume,doOnErrorsubscribe(valueHandler, error -> doSomethingWithError(error))代替。


推荐阅读