就Mono
而言,它们之间的主要区别是什么?从文档中,我读到flatMap
异步和map
同步。但这对我来说并没有真正的意义 b/c Mono 是关于并行性的,这一点是不可理解的。有人可以用更易于理解的方式改写它吗?
然后在flatMap
文档中声明 (https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#flatMap-java.util.function.Function-(:
Transform the item emitted by this Mono asynchronously, returning the
value emitted by another Mono (possibly changing the value type).
那里指的是哪个另一个单声道?
Mono#flatMap
采用将一个值转换为另一个Mono
的Function
。该 Mono 可以表示一些异步处理,例如 HTTP 请求。
另一方面,Mono#map
采用Function
,将类型为 T
的值转换为另一个值,类型 R
。因此,该转换是命令式和同步完成的(例如,将String
转换为URL
实例(。
flatMap
的另一个微妙之处是运算符订阅生成的Mono
,这与将相同的Function
传递给map
时会发生什么。
简单地说,
map(a -> b) is returning Mono.just(b)
map 将返回的值包装在另一个 mono 中,而 flatmap 已经期望 Mono 不需要进一步包装
实际用例示例,
public Mono<String> getResponseFromServer(Mono<String> request) {
// here few logics
request.flatMap(r -> callServer(r);
}
调用服务器的外观
public Mono<String> callServer(String body) {
// invoke http
return http call returned mono
}
上述用例不适用于地图。