Javascript 删除可观察对象是否也会删除其订阅?

Javascript 删除可观察对象是否也会删除其订阅?,javascript,angular,rxjs,Javascript,Angular,Rxjs,我有一个组的角形数组。在应用程序的其他地方,一些订阅是在formcontrol验证更改上设置的。在生命周期的某个时刻,我删除了一个formgroup。我是否需要担心订阅仍然在内存中不再存在的对象上打开 我是否需要担心订阅仍然在内存中不再存在的对象上打开 只要订阅/可观察对象处于打开状态并且运行变量,即使父元素不再可用,该变量仍将在内存中。从而导致内存泄漏 黄金法则:你应该总是取消订阅观测值 此规则存在某些例外/边缘情况,例如Http请求在完成后自动取消订阅,因此理论上不需要取消订阅 编辑:我发现

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

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

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

黄金法则:你应该总是取消订阅观测值

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

编辑:我发现一篇文章对其进行了更深入的解释

如果在代码中的任意位置调用.subscribe,唯一不泄漏内存的方法是确保再次取消订阅这些订阅

你需要手动取消订阅每一个,或者确保你订阅的观测值都是有限的——这意味着它们在某处有一个“结束”信号。它们可以是有限序列(.first()、.take()等),也可以通过以.takeWhile()或.takeUntil()结尾来关闭

订阅并不关心您是否离开作用域、删除引用的对象,甚至导航离开。你需要确保他们被取消订阅

请看我的回答:

显示一些代码?可能与您的答案重复我非常感谢您的答案,这是一个很好的答案,但并不能解决我的特殊问题。我正在模块内设置订阅。我应该发布代码-我将更新我的问题,但是现在:我有一个单独的es6模块,它有一个方法,该方法接受2个表单控件,并设置对其验证状态的订阅。如果一个获得新值,则对另一个运行验证检查。我从组件调用该方法。现在有一个订阅,我的组件没有直接创建,所以我不知道如何轻松地连接到ngdestroy上。@Craig如果它们是在内部创建的,检查它们是否被取消订阅并不是你的责任,而是创建它们的模块/库的一部分。或者我不完全理解你的情况