Flux 完成时的返回值?
Posted
技术标签:
【中文标题】Flux 完成时的返回值?【英文标题】:Return value when Flux completes? 【发布时间】:2019-06-15 22:54:07 【问题描述】:我想在Flux
完成后返回一个值(或发布者)。这是一个类似于我所追求的(伪)代码的示例:
val myId : Mono<String> = fetchMyId()
myId.flatMap id ->
someFlux.map .. .doOnNext ... .returnOnComplete(Mono.just(id))
即我想在someFlux
完成后返回id
。 returnOnComplete
函数是虚构的并且不存在(有一个 doOnComplete
函数,但它用于副作用)这就是我问这个问题的原因。我该怎么做?
【问题讨论】:
【参考方案1】:在then(Mono<V>)
之上,正如@g00glen00b 所建议的那样,当您的继续是一个简单的Mono.just
时,还有一个thenReturn(V)
方法更短/更清晰:
mono.then(Mono.just("foo")); //is the same as:
mono.thenReturn("foo");
【讨论】:
【参考方案2】:您可以使用then(Mono<V>)
运算符,因为它完全符合the documentation 的要求:
让这个
Flux
完成,然后播放来自提供的Mono
的信号。换句话说,忽略此
Flux
中的元素并将其完成信号转换为提供的Mono<V>
的发射和完成信号。在生成的Mono<V>
中重放错误信号。
例如:
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));
【讨论】:
以上是关于Flux 完成时的返回值?的主要内容,如果未能解决你的问题,请参考以下文章