javascript - RxJS - 我需要退订吗

标签 javascript garbage-collection rxjs

如果我有这样的东西:

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 的函数。

一般来说,如果您订阅了一个可观察对象,该可观察对象将继续调用传递给 subscribenext 函数 - 除非可观察对象完成或出错。

如果您希望 Observable 停止调用 next 函数并释放与订阅关联的任何资源 - 包括从 next 函数中引用的资源 - 你必须调用取消订阅

Observable 会在没有 unsubscribe 调用的情况下释放资源的唯一情况是当 Observable 完成或出错时。

关于javascript - RxJS - 我需要退订吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44536497/

相关文章:

angular - 如何让 Observable 返回转换后的项目数组(Rxjs)

angular - 处理 RxJs flatMap 流中的错误并继续处理

javascript - 从函数中获取返回值然后在promise.all()中使用?

Java GC - Minor GC Collection 是 STW 事件吗?

javascript - chrome.tabs.executeScript 的回调在我想要它之前被调用,需要解决方法

python - Cython 指令 no_gc 的用法

javascript - JavaScript 中的内存管理技术

angular - rxjs observable subscribe 什么时候同步执行?

javascript - 使用 jQuery 检查列表中第一个可用/缺失的 id?

javascript - 如何获取动态脚本id