微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

transform vs transformDeferred

如何解决transform vs transformDeferred

项目反应堆流量中transformtransformDeferred间的区别是什么。

好的榜样会有所帮助。

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

解决方法

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

这称为 Flux(每次您订阅冷资源时,该资源都会重新生成其数据,以使新订户受益)。

所以我们可以区分:

  • 组装时间:我们在Flux实例上调用运算符并返回新的Flux实例的那一刻
  • 订购时间:该实例的订购时间。实际上,时刻(复数)是因为可能存在多个订阅,而订阅可能相距遥远。

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

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

现在,您可以通过transform在服务的所有返回通量的方法中应用此特征。

立即在组装时应用它。由于订阅者紧随其后,他们都“共享”了该功能的相同结果。

现在假设您希望将日志记录到例如。包括订阅时间或其他更依赖于每个单独订阅者的数据。

这是transformDeferred出现的地方:它将Function的应用推迟到发生订阅的那一刻。另外,它将Function应用于每次订阅。

因此您可以执行以下操作:

loggingTrait = f -> f.log(serviceName + "@" + System.currentTimeMillis());

每个用户的日志类别都不同。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。