java - 记录反应链中的哪些方法出现异常
问题描述
我的反应链中有一些可以引发异常的方法。如果发生异常——我不想继续执行链,并且我想记录——究竟是什么动作引发了异常。
我写了一个代码,看起来像这样:
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
出乎我的意料
解决方案
- 您需要将反应链视为管道或数据流。在管道中,错误也是与其他数据相同的数据。
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();
推荐阅读
- php - 购物车数组 $_SESSION['cart'] 未正确打印购物车项目
- sql - 是否能够像这样使用 VBA 将字段拆分为 MS Access 中的多个记录?
- javascript - NodeJS:数据持久层
- python - 我得到'int'对象不可调用
- jquery - 覆盖 DataTable 中的“bStateSave”和“oSearch”
- google-chrome-extension - Chrome 扩展如何查看所选元素的路径名?没有解析网址?
- node.js - 自动生成时间戳 postgres 环回 4
- c# - 循环结果不正确
- arrays - 使用 jolt 对 json 数组中的数组进行排序
- rust - 如何在 Actix-web 4.0 中使用 actix_web::client::Client