删除observable是否也删除了订阅?

时间:2018-05-25 14:18:45

标签: javascript angular rxjs

我有一个Angular表单数组。在应用程序的其他地方,一些订阅是在formcontrol验证更改上设置的。在生命周期的某个时刻,我删除了一个表单组。我是否需要担心订阅仍然在内存中不存在的对象上打开?

2 个答案:

答案 0 :(得分:1)

NO

如果你在代码中的任何地方调用.subscribe,那么不泄漏内存的唯一方法就是确保这些订阅再次取消订阅。

您需要手动取消订阅每一个或确保您订阅的观察者都是有限的 - 这意味着他们有一个"结束"某处发出信号。它们可以是有限的序列(.first(),. take()等),也可以通过以.takeWhile()或.takeUntil()

结尾来切换它们。

如果您留下范围,删除引用的对象甚至导航,订阅都不关心。你需要确保他们取消订阅。

请在此处查看我的回答: RXJS - Angular - unsubscribe from Subjects

答案 1 :(得分:0)

  

我是否需要担心订阅仍然在内存中不存在的对象上打开?

只要订阅/ observable处于打开状态并且正在运行,即使您的父元素不再可用,该变量仍将在内存中。从而导致记忆泄漏。

黄金法则:您应该始终取消订阅可观察量。

此规则存在某些异常/边缘情况,例如Http Requests在完成后自动取消订阅,因此理论上不需要取消订阅。

编辑:我发现了一篇文章,更深入地解释了它Angular/RxJs When should I unsubscribe from `Subscription`