java - 在不丢失第一个结果的情况下调用第二个 Mono 的最佳方法是什么?
问题描述
我的代码需要与两个反应性依赖项交互 - 保存到数据库并发布到流,每个都返回Mono
实例。在此之后,我需要做更多的处理 - 全部使用我开始使用的原始对象,如下所示:
val myObject = Mono.just(“thing”);
myObject.flatMap(repository::save)
.flatMap(stream::publish)
.map(obj -> moreProcessing(obj));
但问题是,repository.save
不返回Mono
我感兴趣的对象的 a ,也不返回stream.publish
.
我可以通过以下方式实现我想要的:
myObject.flatMap(obj -> repository.save(obj).then(Mono.just(obj))
.flatMap(obj -> stream.publish(obj).then(Mono.just(obj))
.map(obj -> moreProcessing(obj));
即映射到依赖函数只是为了获取它们的行为,然后再直接映射回来,但这看起来很奇怪——就像我可能错过了一些更好的方法来使用 API,它不会提示我在类型之间进行映射,因为那不是我正在使用flatMap
的,真的。
我也可以使用类似的东西:
myObject.flatMap(obj ->
repository.save(obj)
.flatMap(x -> publisher.stream(obj))
.map(x -> moreProcessing(obj)));
但这似乎也不是一个好方法,因为即使在相对简单的情况下,它也会导致难以维护的代码。
想法?
解决方案
你试过了thipWhen
吗?它的行为就像您希望的那样,唯一的限制是,如果 的结果rightGenerator
为空(没有下一个信号),它会立即完成。因此,您需要返回一个Optional
or 使用thenReturn
or switchIfEmpty
。
推荐阅读
- django - 什么是 queryset = super().get_queryset()?
- autodesk-forge - Forge ARKit 获取 Unity 状态 501 未实现
- sql - SQL Anywhere query to dig schema structure
- python-3.x - Bings Ads Api Python 获取一个帐户的所有广告系列
- java - 老虎机 GUI JButton 未在 JTextField 上实现
- css - 如何仅在左边框和其他 3 边的正常边框上创建线性渐变?
- python - 网页抓取网站时我的输出出现问题
- python - 熊猫 to_excel 没有数据
- rust - 如何将 4 元素 &[u8] 转换为 i32?
- reactjs - Axios 发布请求未在 chatengine.io 上创建用户