10

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

AngularHttpClient.post使用冷的 observables 发送数据,并在您拨打电话时重复。

Angular 中是否有任何方法可以知道特定方法是使用热观测值还是冷观测值?

4

2 回答 2

10

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

您还必须依靠文档来了解 observable 何时/如何完成。例如,您不必担心退订,HttpClient.post因为您知道它会完成。但是,如果您在 HttpClient 周围使用某种包装器,该包装器通过缓存的主题提供请求,您可能无法再完成。每个组件都将生成一个新的订阅,并且在组件被销毁后,该订阅将是从主题到组件的引用,因此组件不会被垃圾收集,并且最终会导致内存泄漏。

没有办法以编程方式知道您订阅了哪种 Observable,它是否会完成。

一般来说,这是通过聪明地完成你的 observables 和使用工具来管理的,比如takeUntilSubscription清理对长期运行的未完成的 observables 或昂贵的 observable 工作负载的订阅。

*编辑:实际上,为了澄清,你需要小心所有可观察的,而不仅仅是冷的可观察。Hot observables 也会产生昂贵的工作负载。

* EDIT2:更新删除ActivatedRoute的示例,因为这些可观察对象在组件被销毁时完成。

于 2017-09-06T20:01:44.237 回答
0

一个 Observable 可以有 2 种行为:

a) 当订阅者订阅它时,订阅者会收到一组数据。要接收新数据,您需要再次订阅它。

b) 当订阅者订阅它时,订阅者连续接收数据(当数据流发生变化时)。为了接收新数据,您不需要再次订阅 observable。

在 a) 的情况下,我们谈论的是 COLD Observervable;

在情况 b) 中,我们谈论的是 HOT Observervable;

检查这篇文章

于 2021-01-17T19:27:05.880 回答