Project Reactor Mono 是否有运算符或一些好的方法来实现 doOnEmpty() 的行为?
我想对操作结果产生副作用(日志记录)。
这是我现在拥有的:
myMono
.map(value -> new Wrapped(value))
.defaultIfEmpty(new Wrapped(null))
.doOnEach( ... )
.flatMap(wrapped ->
wrapped.value == null ?
Mono.empty() : Mono.just(wrapped.value))
所以我正在包装实际值,或者在空的情况下创建空包装器。然后 wrapper 因副作用而被消耗。
相反,使用类似 doOnEmpty(Consumer> signalConsumer) 的方法会很好。为了让事情更复杂一点,我需要访问 Signal以便访问上下文(包含日志记录所需的数据)。
有这些answers但我认为它们不适用或提供对 Context 的访问。
所以现在我想到了这一点,也许正确的问题是:
“是否有一种方法可以确定 doOnEach(Consumer Signal) 中的 observable 是否解析为空?”
最佳答案
一些实现无副作用的“Empty Catch”的例子。
Mono.empty()
.doOnSuccess(result -> {
if (result == null) {
// This is an empty result
Logger.info(this.getClass(), "result = {}", result);
}
})
.subscribe();
Mono.empty()
.switchIfEmpty(Mono.error(new Exception()))
.doOnNext(o -> Logger.info(Object.class, "doOnNext"))
.doOnError(Exception.class, error -> Logger.info(Exception.class, "doOnError"))
.subscribe();
https://stackoverflow.com/questions/54880354/
相关文章:
python - Matplotlib png 输出在 reportlab 的 pdf 中出现 "b
Android WebRTC 不适用于不同的网络 - 无视频
javascript - 如何防止在 Angular 4+ 中更改查询字符串时页面刷新/重新加载?
c# - Microsoft 依赖注入(inject)和逆变
google-chrome - 谷歌登录 "error": "popup_closed_by_use
ubuntu-16.04 - 设置了 CATALINA_PID 但指定的文件不存在