首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >transform vs transformDeferred

transform vs transformDeferred
EN

Stack Overflow用户
提问于 2020-09-02 18:57:57
回答 1查看 3.9K关注 0票数 4

transformtransformDeferred在工程反应器流量中的区别是什么?

好的例子会有帮助的。

https://projectreactor.io/docs/core/release/reference/index.html#advanced-mutualizing-operator-usage

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-10 10:34:48

大多数情况下,Flux是“懒惰”的:您声明了一个处理管道,但是数据只有在订阅之后才会开始流动。你可以多次订阅。

这称为冷Flux (每次订阅冷源时,源都会为新订阅者重新生成数据)。

这样我们就能区分:

  • assembly time:我们在Flux实例上调用操作符的时刻,返回一个新的Flux instance
  • subscription time:该实例被订阅的时刻。实际上,这些时刻(复数),因为可能有多个订阅,这些订阅可能很遥远。

transform是一种将一组运算符应用于给定Flux的方便方法。例如,您希望服务的方法返回的所有Flux都使用.log("serviceName"),因此在static Function<Flux, Flux>中将此特性具体化。

loggingTrait =f -> f.log(“serviceName”);

现在,您可以通过transform将此特性应用于服务的所有流控返回方法中。

它是立即应用,就在集会时间。由于订阅者之后,他们都“共享”相同的结果的功能。

现在想象一下你想要伐木。包括订阅时间,或其他更依赖于每个订阅者的数据。

这就是transformDeferred进来的地方:它把Function的应用程序推迟到订阅发生的那一刻。此外,它还为每个订阅应用了Function

所以你可以做这样的事:

代码语言:javascript
复制
loggingTrait = f -> f.log(serviceName + "@" + System.currentTimeMillis());

对于每个订阅者,日志类别将是不同的。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63711972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档