当前位置: 首页 > 知识库问答 >
问题:

项目Reactor。mono.map()vs mono.flatmap()

史商震
2023-03-14

mono而言,它们之间的主要区别是什么?从文档中,我了解到FlatMap异步操作,而Map是同步操作。但这对我来说并没有什么意义,B/C单声道是关于并行性的,这一点是不可理解的。有人能用一种更容易理解的方式来重新表述吗?

然后在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).

另一个单声道是指哪一个?

共有1个答案

米俊喆
2023-03-14

mono#FlatMap接受一个函数,该函数将一个值转换为另一个mono。该单声道可以表示一些异步处理,如HTTP请求。

另一方面,mono#map接受一个函数,该函数将T类型的值转换为另一个R类型的值。因此,这种转换必须同步进行(例如,将字符串转换为URL实例)。

FlatMap的另一个微妙之处在于,操作符订阅生成的mono,这与将相同的函数传递给map时的情况不同。

 类似资料:
  • 请忽略这个问题。我有错误的设置,导致gRPC的性能不佳。 是否可以比较GRPC与项目Reactor? 我只是想比较REST和GRPC的性能。我看不出GRPC比Reactor快。事实上,它更糟。 GRPC设置: 此 grpc 服务器使用服务器端流对来自 api 服务器的每个请求响应 1000 个“Hello”。 api 服务器返回

  • 项目Reactor3.1.5。发布 考虑这一点: 我希望订阅服务器在多个线程中运行,但它只在一个线程中运行: 留档告诉我的期望是正确的(http://projectreactor.io/docs/core/release/reference/#threading)。有人能给我解释一下那里发生了什么吗?

  • 我创建了一个简单的Kafka使用者,它返回一个对象流(接收到的消息),我试图使用测试它。 在我的测试中,我做了类似的事情: 断言工作正常(如果将值从更改为其他值,则测试失败)。但是,如果断言通过,测试永远不会退出。 我还尝试使用方法,如下所示: 在本例中,我得到以下错误: 你知道我做错了什么吗?

  • 我是项目Reactor或反应式编程的新手,所以我可能做错了什么。我正在努力构建一个执行以下操作的流程: 给定类实体: 从DB读取实体(

  • 我试图在Reactor顶部设计一个管道框架。 在每个阶段(不考虑第一个和最后一个阶段),我们都有转换对象的任务(即字符串到其长度或url到其HTML内容等)。举个例子: 您可以看到中间层有3个任务,每个任务将一个X对象转换为一个Y对象(顺便说一句,它始终是一个完全连接的层) 我的问题/困境:我的第一个想法是,我所需要的是通量。merge(),然后将其连接到每个订阅者。例如: 另一种选择是放置处理器

  • Project Reactor很棒,我可以很容易地切换一个线程来处理另一个线程上的某些部分,但我已经查看了schedulers.fromExecutorService()方法,该方法每次都会分配新的ExecutorService。因此,当调用此方法时,总是会创建调度器并再次分配调度器。我不确定,但我认为这可能会导致内存泄漏... 我想知道如何将调度器注册为bean,它单例所以只会分配一次,而不是每