Pra*_*dey 4 java functional-programming project-reactor
我有一串弦。对于每个字符串,我必须进行远程调用。但问题是,进行远程调用的方法实际上返回了 Mono 响应(显然,因为对应于单个请求,所以将有单个响应)。
处理此类情况的正确模式应该是什么?我能想到的一种解决方案是对流元素进行串行(或并行)调用,并将响应减少为单个响应并返回。
这是代码:
fluxObj.flatmap(a -> makeRemoteCall(a)//converts the Mono of the response to a Flux).reduce(...)
Run Code Online (Sandbox Code Playgroud)
我无法将头转入 . 该flatmap方法makeRemoteCall返回一个Mono. 但返回的是响应的flatmapa 。Flux首先,为什么会发生这种情况?其次,这是否意味着返回Flux包含单个响应对象(在 中返回Mono)?
如果mapper Function返回 a ,则意味着中的每个源元素Mono(至多)有一个派生值。Flux
获得Function回报:
Mono.empty())意味着该源值被“忽略”Mono(如您的示例中所示)意味着该源值异步映射到另一个特定值Flux对于给定值有多个派生值意味着该源值异步映射到多个值例如,给出以下内容flatMap:
Flux.just("A", "B")
.flatMap(v -> Mono.just("value" + v))
Run Code Online (Sandbox Code Playgroud)
订阅上述内容Flux<String>并打印发出的元素将产生:
valueA
valueB
Run Code Online (Sandbox Code Playgroud)
另一个有趣的例子:如果有延迟,可能会得到无序的结果。像这样:
Flux.just(300, 100)
.flatMap(delay -> Mono.delay(Duration.ofMillis(delay))
.thenReturn(delay + "ms")
)
Run Code Online (Sandbox Code Playgroud)
将导致 aFlux<String>产生:
100ms
300ms
Run Code Online (Sandbox Code Playgroud)