如果我有这样的东西:
class MyComponent {
constructor() {
this.interval = Observbale.interval(1000);
}
}
const c = new MyComponent();
const subscription = c.interval.subscribe(() => { ... })
现在假设我在某个时刻这样做:
c = null;
我仍然需要调用 subscription.unsubscribe()
还是 GC 会处理这个“泄漏”?
最佳答案
是的。您需要对返回的订阅调用 unsubscribe
。
在内部,有一个对 window.setInterval
的调用,它的实现将保存对可观察对象的引用。将您的引用设置为 null
对此没有影响,因此不会收集可观察对象,并且将继续调用传递给 subscribe
的函数。
一般来说,如果您订阅了一个可观察对象,该可观察对象将继续调用传递给 subscribe
的 next
函数 - 除非可观察对象完成或出错。
如果您希望 Observable 停止调用 next
函数并释放与订阅关联的任何资源 - 包括从 next
函数中引用的资源 - 你必须调用取消订阅
。
Observable 会在没有 unsubscribe
调用的情况下释放资源的唯一情况是当 Observable 完成或出错时。
关于javascript - RxJS - 我需要退订吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44536497/