【问题标题】:Return value when Flux completes?Flux 完成时的返回值?
【发布时间】:2019-06-15 22:54:07
【问题描述】:

我想在Flux 完成后返回一个值(或发布者)。这是一个类似于我所追求的(伪)代码的示例:

val myId : Mono<String> = fetchMyId()
myId.flatMap { id ->
     someFlux.map { .. }.doOnNext { ... }.returnOnComplete(Mono.just(id))
}

即我想在someFlux 完成后返回idreturnOnComplete 函数是虚构的并且不存在(有一个 doOnComplete 函数,但它用于副作用)这就是我问这个问题的原因。我该怎么做?

【问题讨论】:

    标签: spring-boot reactive-programming spring-webflux project-reactor


    【解决方案1】:

    then(Mono&lt;V&gt;) 之上,正如@g00glen00b 所建议的那样,当您的继续是一个简单的Mono.just 时,还有一个thenReturn(V) 方法更短/更清晰:

    mono.then(Mono.just("foo")); //is the same as:
    mono.thenReturn("foo");
    

    【讨论】:

      【解决方案2】:

      您可以使用then(Mono&lt;V&gt;) 运算符,因为它完全符合the documentation 的要求:

      让这个Flux 完成,然后播放来自提供的Mono 的信号。

      换句话说,忽略此Flux 中的元素并将其完成信号转换为提供的Mono&lt;V&gt; 的发射和完成信号。在生成的Mono&lt;V&gt; 中重放错误信号。

      例如:

      Mono
          .just("abc")
          .flatMap(id -> Flux.range(1, 10)
              .doOnNext(nr -> logger.info("Number: {}", nr))
              .then(Mono.just(id)))
          .subscribe(id -> logger.info("ID: {}", id));
      

      【讨论】:

        猜你喜欢
        • 2019-01-09
        • 1970-01-01
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-08
        • 2020-04-24
        • 2014-12-14
        相关资源
        最近更新 更多