【发布时间】:2019-05-25 19:56:42
【问题描述】:
我正在附加一个带有 flatMap 的 Flux,但如果我添加额外的 flatMap,则只会返回最后一个。
// Here is an example of the Mono function
private Mono<MyType> appendFirstMono(Group group) {
return Mono.just(group)
.map(MyType::new)
.flatMap(g -> functionZ(group)
.map(g::setField));
}
//This works as expected
public Flux<MyType> function1() {
return returnData(id)
.thenMany(service.getData(id))
.flatMap(this::appendFirstMono);
}
//This does not and only returns the last mono (3rd)
public Flux<MyType> function1() {
return returnData(id)
.thenMany(service.getData(id))
.flatMap(this::appendFirstMono)
.flatMap(this::appendSecondMono)
.flatMap(this::appendThirdMono);
}
//I've attempted to fix with this... Doesn't work as expected.
public Flux<MyType> function1() {
return returnData(id)
.thenMany(service.getData(id))
.flatMap(x -> {
return Flux.merge(
appendFirstMono(x),
appendSecondMono(x),
appendThirdMono(x)
);
});
}
我需要处理通量上的每个 Mono 函数,但我似乎无法让每个函数正确执行和返回。
【问题讨论】:
-
你指的是mergeSequential吗?那是行不通的。有序函数调用中的最后一个单声道是唯一返回其值的单声道。