[英]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
对于项目反应器(在某种程度上,在一般的反应式编程中),事情发生在两个阶段:
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.