我想在Flux
完成后返回一个值(或发布者)。这是一个带有(伪)代码的示例,类似于我的代码:
val myId : Mono<String> = fetchMyId()
myId.flatMap { id ->
someFlux.map { .. }.doOnNext { ... }.returnOnComplete(Mono.just(id))
}
即我想在id
完成后返回someFlux
。 returnOnComplete
函数是虚构的,并且不存在(有一个doOnComplete
函数,但是它是有副作用的),这就是为什么我问这个问题。我该怎么办?
答案 0 :(得分:3)
您可以使用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));
答案 1 :(得分:3)
如{g1glen00b所建议的那样,在then(Mono<V>)
之上,有一个thenReturn(V)
方法,当您的延续是简单的Mono.just
时,它的编写/清除方法会更短一些:>
mono.then(Mono.just("foo")); //is the same as:
mono.thenReturn("foo");