gpt4 book ai didi

java - Reactor:检测空信号以能够作用于空Mono

转载 作者:行者123 更新时间:2023-12-05 07:25:20 34 4
gpt4 key购买 nike

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”的例子。

  • doOnSuccess - 以可为空的结果调用
Mono.empty()
.doOnSuccess(result -> {
if (result == null) {
// This is an empty result
Logger.info(this.getClass(), "result = {}", result);
}
})
.subscribe();
  • switchIfEmpty + doOnError - 使用抛出和捕获已知异常跳过管道
Mono.empty()
.switchIfEmpty(Mono.error(new Exception()))
.doOnNext(o -> Logger.info(Object.class, "doOnNext"))
.doOnError(Exception.class, error -> Logger.info(Exception.class, "doOnError"))
.subscribe();

关于java - Reactor:检测空信号以能够作用于空Mono,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54880354/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com