改变运营成功

时间:2019-06-03 14:41:36

标签: cloudfoundry project-reactor

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

  • 我执行了一个返回Mono<Void>
  • 的请求
  • 成功完成此Mono后,我想执行一个返回Mono<String>的可选操作
  • 为了确定何时执行第二项操作,我使用了filter,但似乎不起作用

所以,它看起来像这样:

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中的代码永远不会执行。 javadoc的{​​{1}}状态:

  

如果此Mono被赋值,请测试结果,如果谓词返回true,则重播该结果。否则就没有价值。

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

1 个答案:

答案 0 :(得分:1)

Mono<Void>的意思是“将完成而没有值或错误”,因为您无法实例化Void类型。

您需要的是then运算符,它将忽略先前的结果并将流“切换”到提供的Mono
还有thenMany,以防您需要将其“切换”到Flux