【问题标题】:Log what method in reactive chain thew an exception记录反应链中的哪些方法出现异常
【发布时间】:2020-12-16 23:08:50
【问题描述】:

我的反应链中有一些可以引发异常的方法。如果发生异常 - 我不想继续执行链,并且我想记录 - 究竟是什么动作引发了异常。

我写了一个代码,看起来像这样:

   Mono<Void> mono = Mono.just(10)
            .map(a -> action1(a))
            .doOnError((t) -> System.out.println("action 1 threw an exception"))
            .onErrorStop()
            .map(a -> action2(a)) 
            .doOnError((t) -> System.out.println("action 2 threw an exception"))
            .then();
    
    mono.subscribe();

但是当action1 抛出异常时 - 我得到以下输出:

action 1 threw an exception
action 2 threw an exception

这不是我所期望的

【问题讨论】:

标签: java project-reactor reactive


【解决方案1】:
  1. 您需要将反应链视为管道或数据流。在管道中,错误也是与其他数据相同的数据。
  2. flatMap() 方法在数据可用时将信号更改为另一个(单声道或通量)。
Mono<Void> mono = Mono.just(10)
                .map(a -> action1(a))
                .doOnError((t) -> System.out.println("action 1 threw an exception"))
                .flatMap(a -> Mono.just(a)
                        .map(value -> action2(value))
                        .doOnError((t) -> System.out.println("action 2 threw an exception"))
                        .then()
                )
                .then();
        mono.subscribe();

【讨论】:

    猜你喜欢
    • 2020-04-29
    • 2012-02-12
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2015-08-28
    • 2012-12-18
    相关资源
    最近更新 更多