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

标签 java reactive-programming reactor

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/

相关文章:

android - 更新同一订阅中的 flatMap 并发限制

java - Spring Webflux 是否在每个请求的单个线程中调用单个 HandlerFunction?

python - 使用 Twisted, 'connectionMade' 如何触发特定的 Deferred?

java - Long vs Integer,long vs int,什么时候使用?

reactjs - 单击外部 url 的图像react.js

reactive-programming - 使用 RxJava 编写具有依赖项的异步 Observable

python - 通过扭曲的 inlineCallbacks 运行 Scrapy 蜘蛛

java - 如何在Java中正确返回金钱双变量

java - 使Java父类方法返回子类对象的方法

java - 在 playframework 2.0 中,如何在模板中使用 session 对象?