在RxJS中,热可观察者是使用外部生产者的可观察者,而冷可观察者是使用本地生产者的见者(例如参见RxJS Hot vs Cold Observable by Ben Lesh)。

Angular HttpClient.post使用冷的可观察对象来发送数据并在您每次通话时重复。

在Angular中,有什么方法可以知道某个特定的方法使用的是可观察到的冷热观测?

最佳答案

不可以。文档是最安全的选择。另外,我不同意@martin的评论,这绝对是很重要的。您需要注意冷的可观察性,以避免重新订阅和重新发布昂贵的操作(例如,通过使用多播或将结果保存到主题)。

您还必须依靠文档来了解可观察对象的完成时间/方式。例如,您不必担心会取消订阅HttpClient.post,因为您知道它会完成。但是,如果您在HttpClient周围使用某种包装器,该包装器通过缓存的主题来处理请求,则可能无法再完成。每个组件都将生成一个新的预订,并且在销毁该组件之后,该预订将成为从Subject到该组件的引用,因此不会对该组件进行垃圾回收,并且最终会导致内存泄漏。

无法以编程方式知道您所订阅的是哪种Observable,无论它是否完成。

通常,这既可以通过明智地完成可观察对象来实现,也可以使用takeUntilSubscription之类的工具来清理对长期运行的不可完成的可观察对象或昂贵的可观察工作负载的订阅。

*编辑:实际上,为澄清起见,您需要小心所有可观察物,而不仅仅是冷的可观察物。热点观测值也可能产生昂贵的工作负载。

* EDIT2:更新示例删除了ActivatedRoute,因为在销毁组件时已完成了这些可观察项。

关于angular - 冷热观测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46079534/

10-10 02:46