栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

反应堆中的地图与平面地图

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

反应堆中的地图与平面地图

  • map
    用于同步,非阻塞,一对一转换
  • flatMap
    用于异步(非阻塞)1-to-N转换

区别在方法签名中可见:

  • map
    取a
    Function<T, U>
    并返回a
    Flux<U>
  • flatMap
    取a
    Function<T, Publisher<V>>
    并返回a
    Flux<V>

这是主要提示:您 可以 将传递

Function<T,Publisher<V>>
map
,但它不知道如何处理
Publishers
,这将导致
Flux<Publisher<V>>
一系列惰性发布者。

另一方面,每个

flatMap
期望a 。它知道如何处理它:订阅它并在输出序列中传播它的元素。其结果,返回类型:将压扁每个内进入的输出序列 的所有
的第
Publisher<V>``T``Flux<V>``flatMap``Publisher<V>
__
V

关于1-N方面:

对于每个

<T>
输入元素,
flatMap
将其映射到
Publisher<V>
。在某些情况下(例如HTTP请求),该发布者将仅发出一项,在这种情况下,我们非常接近async
map

但这就是简朴的情况。一般情况是a

Publisher
可以发出多个元素,并且
flatMap
效果也一样。

举例来说,假设您有一个反应型数据库,并且您从一系列用户ID中获取了flatMap,并且请求返回了用户的

Badge
。您最终
Flux<Badge>
将获得所有这些用户的所有徽章。

map
真的是同步和 非阻塞的 吗?

是的:它在操作员应用它的方式(一个简单的方法调用,然后操作员发出结果)上是同步的,并且在函数本身不应该阻止操作员调用它的意义上说是非阻塞的。换句话说,它不应该引入延迟。这是因为

Flux
a总体上还是异步的。如果阻塞中间序列,则将影响其余的
Flux
处理过程,甚至其他过程
Flux

如果您的地图函数正在阻止/引入延迟,但无法将其转换为返回

Publisher
,请考虑
publishOn
/
subscribeOn
以抵消在单独线程上的阻止工作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号