繁体   English   中英

即使存在数据,也会调用 Spring WebFlux Mono.switchIfEmpty

[英]Spring WebFlux Mono.switchIfEmpty is getting called even if data present

我是 Spring webflux 的新手。 需要了解为什么即使数据不为空也会调用 Mono.switchIfEmpty 运算符。

示例代码:

public static void main(String[] args) {
    Mono.just("test1")
            .flatMap(val -> {
                System.out.println("test2");
                return Mono.just("test2");
            })
            .switchIfEmpty(method1())
            .subscribe(s -> System.out.println(s));
}

private static Mono<String> method1() {
    System.out.println("test3");
    return Mono.empty();
}

输出

测试3 测试2 测试2

对于项目反应器(在某种程度上,在一般的反应式编程中),事情发生在两个阶段:

  1. 设置反应式管道
  2. 一旦Subscriber者订阅该管道,该管道的实际执行

在您的情况下,调用method1执行该方法,并且您的System.out.println会按预期执行。

如果你想看到更多符合管道执行的,你可以尝试:

private static Mono<String> method1() {
    return Mono.defer(() -> {
        System.out.println("test3");            
        return Mono.empty()
    });
}

Mono.defer运算符将推迟该操作,直到订阅管道。

有更好的方法来实现这一点:

  • 您可以使用许多DoOnXYZ运算符之一,这些运算符用于DoOnXYZ副作用操作
  • 您可以使用log()运算符来更好地了解此处发生的情况(订阅、背压等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM