繁体   English   中英

如何捕获反应堆抛出的异常?

[英]How to catch exceptions thrown from reactor?

我想捕获从通量抛出的异常,我的代码是这样的:

        try {
            Flux.just("key1", "key2", "key3")
                    .doOnNext(System.out::println)
                    .map(k -> {
                        if (!k.equals("key1")) {
                            throw new RuntimeException("Not key1"); // 1
                        }
                        return "External Value, key:" + k;
                    })
                    .subscribe(System.out::println); // 2
        } catch (Throwable e) {
            System.out.println("Got exception"); // 3
        }

output 是:

key1
External Value, key:key1
key2
[ERROR] (main) Operator called default onErrorDropped - reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.RuntimeException: Not key1
reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.RuntimeException: Not key1
Caused by: java.lang.RuntimeException: Not key1
    at com.cxd.study.reactor.HandlingErrors.lambda$catchException$7(HandlingErrors.java:153)
...

似乎从未达到我在第 3 步的捕获量

我知道我可以像这样在第 2 步遇到异常: .subscribe(System.out::println, e -> System.out.println("Got Exception"))

但是我怎样才能从通量中捕捉到第 1 步抛出的异常呢?

您可以使用onError()运算符来处理错误情况,或者如果您想记录异常,则可以使用doOnError()运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM