反应流地图运算符永远不会被执行

Reactive streams map operator never getting executed

对于下面的代码

Mono<String> input = 
        Mono.just("input")
                .map {
                   println "inside map"
                   it + "added"
                 }
                 .transform {
                  Mono.just("hello")
                }

input.subscribe {println it}

控制台如下所示。

16:11:49.056 [main] DEBUG reactor.util.Loggers$LoggerFactory - Using Slf4j logging framework
hello

map 函数中的代码从未执行过。我知道 transform 方法在 assembly time 而不是订阅处执行。

原因是transform不会自动订阅你原来的Mono。将您的逻辑链接到它是您的责任。因为没有人订阅它,所以它永远不会被触发。

由于您发送的示例是假的,所以很难说什么是正确的做法。这取决于您的用例。

不过,您可以做一些事情:

  1. 摆脱转换,只需使用 then 运算符:
Mono<String> input = 
        Mono.just("input")
                .map {
                   println "inside map"
                   it + "added"
                 }
                 .then(Mono.just("hello"))
  1. 如果出于某种原因你需要 transform,那么将你的逻辑链接到你原来的 Mono:
Mono<String> input = 
        Mono.just("input")
                .map {
                   println "inside map"
                   it + "added"
                 }
                 .transform {
                   it.then(Mono.just("hello"))
                }