代码之家  ›  专栏  ›  技术社区  ›  Craig

删除可观察表是否也会删除对它的订阅?

  •  1
  • Craig  · 技术社区  · 7 年前

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   Per Hornshøj-Schierbeck    7 年前

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

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

    订阅不关心您是离开作用域,删除引用的对象,还是离开。你需要确保他们被取消订阅。

    请看我的答案: RXJS - Angular - unsubscribe from Subjects

        2
  •  0
  •   Nicolas Gehlert    7 年前

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

    只要订阅/Observable打开并运行,即使您的父元素不再可用,变量仍将在内存中。从而导致内存泄漏。

    黄金法则:你应该总是退订可观察的。

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

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