转型成功的单声道

Transform mono on operations success

我正在处理以下用例的 Cloudfoundry Java client

所以,看起来像这样:

Mono<Void> service = createService();
Mono<String> serviceKey =  service.filter( x -> someBoolean)
   .map( x -> someKey)
   .flatMap(key ->  {
       Mono<String> key = serviceKey(key);
       return key;
     });

serviceKey.blockOptional() //returns Empty

我的预期是,当 service 成功并且 filter 操作成功时,第二次调用 serviceKey 将会发生。但是,我在调试器中看到 flatMap 中的代码永远不会执行。 Mono#filterjavadoc 状态:

If this Mono is valued, test the result and replay it if predicate returns true. Otherwise complete without value.

不确定如何理解...问题是,当第一个 return 是 Mono<Void> 时,如何链接成功的操作? 我只想在第一个成功时执行第二个,当过滤器谓词失败时 return 一个空的 Mono

Mono<Void> 表示 "Will either complete without value or error" 因为你不能实例化 Void 类型。

你需要的是then运算符,它会忽略之前的结果和"switches"流向提供的Mono.
还有 thenMany 以防你需要 "switch" 到 Flux