我是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
带有项目反应器(在一定程度上反应性编程中),情况分为两个阶段:
- 设置反应管道
-
Subscriber
订阅
,该管道的实际执行立即执行
在您的情况下,调用method1
执行该方法,并且您的System.out.println
按预期执行。
如果您想查看更多与管道执行一致的信息,则可以尝试:
private static Mono<String> method1() {
return Mono.defer(() -> {
System.out.println("test3");
return Mono.empty()
});
}
Mono.defer
操作员将推迟该操作,直到管道订阅为。
有更好的方法可以实现:
- 您可以使用许多
DoOnXYZ
操作员之一,该操作员用于 - 您可以使用
log()
操作员更好地了解这里发生的事情(订阅,背压等)。