gpt4 book ai didi

java - 处理 Mono Inside Flux 平面图

转载 作者:行者123 更新时间:2023-11-30 05:50:31 27 4
gpt4 key购买 nike

我有一个 Flux 字符串。对于每个字符串,我必须进行远程调用。但问题是,进行远程调用的方法实际上返回的是 Mono 响应(显然,因为对应于单个请求,所以将有单个响应)。

处理此类情况的正确模式应该是什么?我能想到的一种解决方案是对流元素进行串行(或并行)调用,并将响应减少为单个响应并返回。

代码如下:

fluxObj.flatmap(a -> makeRemoteCall(a)//converts the Mono of the response to a Flux).reduce(...)

我无法将头转入flatmapmakeRemoteCall 方法返回一个Mono。但是 flatmap 返回响应的 Flux。首先,为什么会发生这种情况?其次,这是否意味着返回的 Flux 包含单个响应对象(在 Mono 中返回)?

最佳答案

如果mapper Function返回 Mono ,那么这意味着 Flux 中的每个源元素将(最多)有一个派生值

拥有 Function返回:

  • 给定值的空 Mono(例如 Mono.empty() )意味着该源值被“忽略”
  • 有值(value)的Mono (就像在您的示例中一样)意味着该源值异步映射到另一个特定值
  • 一个Flux给定值有多个派生值意味着该源值异步映射到多个值

例如,给出以下 flatMap :

Flux.just("A", "B")
.flatMap(v -> Mono.just("value" + v))

订阅上述Flux<String>打印发出的元素将产生:

valueA
valueB

另一个有趣的例子:如果有延迟,可能会得到无序的结果。像这样:

Flux.just(300, 100)
.flatMap(delay -> Mono.delay(Duration.ofMillis(delay))
.thenReturn(delay + "ms")
)

会产生Flux<String>产生:

100ms
300ms

关于java - 处理 Mono Inside Flux 平面图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53988896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com