RxJS - 我需要取消订阅吗?

时间:2017-06-14 05:54:01

标签: 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会照顾这个“泄漏”吗?

1 个答案:

答案 0 :(得分:5)

是。您需要在返回的订阅上调用unsubscribe

在内部,有一个对window.setInterval的调用,其实现将包含对observable的引用。设置对null的引用不会对此产生任何影响,因此将不会收集observable,并且将继续调用传递给subscribe的函数。

通常,如果您订阅了一个observable,那么observable将继续调用传递给next的{​​{1}}函数 - 除非observable完成或错误。

如果您希望observable停止调用subscribe函数并释放与订阅相关的任何资源 - 包括next函数中引用的资源 - 您必须致电next

在没有unsubscribe调用的情况下,observable将释放资源的唯一情况是可观察的完成或错误。