项目反应堆.Mono.map() vs Mono.flatMap().



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采用将一个值转换为另一个MonoFunction。该 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
}

上述用例不适用于地图。

最新更新