如果我有这样的话:
class MyComponent {
constructor() {
this.interval = Observbale.interval(1000);
}
}
const c = new MyComponent();
const subscription = c.interval.subscribe(() => { ... })
现在让我们说在某个时刻我正在这样做:
c = null;
我还需要之前致电subscription.unsubscribe()
或GC会照顾这个“泄漏”吗?
答案 0 :(得分:5)
是。您需要在返回的订阅上调用unsubscribe
。
在内部,有一个对window.setInterval
的调用,其实现将包含对observable的引用。设置对null
的引用不会对此产生任何影响,因此将不会收集observable,并且将继续调用传递给subscribe
的函数。
通常,如果您订阅了一个observable,那么observable将继续调用传递给next
的{{1}}函数 - 除非observable完成或错误。
如果您希望observable停止调用subscribe
函数并释放与订阅相关的任何资源 - 包括next
函数中引用的资源 - 您必须致电next
。
在没有unsubscribe
调用的情况下,observable将释放资源的唯一情况是可观察的完成或错误。