我对 Mono 和 Flux 还很陌生。我正在尝试加入几个下游 API 响应。这是一个传统的阻塞应用程序。我不想收集 Mono 列表,我想要从下游 API 返回的有效负载列表,我从 Mono 获取该列表。然而,返回到控制器的“结果”有时只有一些或没有下游 API 响应。这样做的正确方法是什么?我读过几篇文章如何迭代 Flux 并与 Mono状态混合
你不应该在网络应用程序的任何地方调用 subscribe 。如果这绑定到 HTTP 请求,那么您基本上会触发反应式管道,而无法保证资源或完成情况。调用 subscribe 会触发管道,但不会等到它完成
我应该使用 CompletableFuture 吗?
在我的服务中我尝试过
var result = new ArrayList<List<>>();
List<Mono<X>> monoList = apiCall();
Flux.fromIterable(monoList)
.flatMap(m -> m.doOnSuccess(
x -> {
result.add(x.getData());
}
)).subscribe();
Run Code Online (Sandbox Code Playgroud)
我还在控制器中尝试了以下操作,但该方法返回而不等待订阅完成
var result = new ArrayList<List<X>>();
Flux.concat(
this.service.callApis(result, ...)
).subscribe();
return result;
Run Code Online (Sandbox Code Playgroud)
在我的服务中
public Mono<Void> callApis(List<List<x>> result, ..) {
...
return Flux.fromIterable(monoList)
.flatMap(m -> m.doOnSuccess(
x -> {
result.add(x.getData()...);
} …Run Code Online (Sandbox Code Playgroud)