Spring WebFlux单声道.Switchifempty即使存在数据也被调用



我是Spring Webflux的新手。需要了解为什么单声道。

示例代码:

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();
}

输出

test3Test2test2

带有项目反应器(在一定程度上反应性编程中),情况分为两个阶段:

  1. 设置反应管道
  2. Subscriber订阅
  3. ,该管道的实际执行立即执行

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

如果您想查看更多与管道执行一致的信息,则可以尝试:

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

Mono.defer操作员将推迟该操作,直到管道订阅为。

有更好的方法可以实现:

  • 您可以使用许多DoOnXYZ操作员之一,该操作员用于
  • 您可以使用log()操作员更好地了解这里发生的事情(订阅,背压等)。

最新更新