【问题标题】:Transform mono on operations success转换单声道操作成功
【发布时间】:2019-06-03 14:41:36
【问题描述】:

我正在处理以下用例的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 for Mono#filter 声明:

如果此 Mono 值,则测试结果并在谓词返回 true 时重放它。否则完全没有价值。

不知道如何理解...问题是,当第一个返回Mono&lt;Void&gt; 时,如何链接成功的操作? 我只想在第一个成功时执行第二个,并在过滤谓词失败时返回一个空的Mono。

【问题讨论】:

    标签: cloud-foundry project-reactor


    【解决方案1】:

    Mono&lt;Void&gt; 表示“将在没有值或错误的情况下完成”,因为您无法实例化 Void 类型。

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

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 2015-12-23
      • 2017-06-20
      • 1970-01-01
      • 2019-07-14
      • 2012-03-04
      • 1970-01-01
      • 2020-03-05
      相关资源
      最近更新 更多