RxJS - 我需要取消订阅吗?

ng2*_*ser 2 javascript garbage-collection rxjs

如果我有这样的事情:

class MyComponent {

  constructor() {

    this.interval = Observbale.interval(1000);

  }
}

const c = new MyComponent();
const subscription = c.interval.subscribe(() => { ... })
Run Code Online (Sandbox Code Playgroud)

现在让我们说在某一点上我这样做:

c = null;
Run Code Online (Sandbox Code Playgroud)

我还需要打电话subscription.unsubscribe()或GC会照顾这个"泄漏"吗?

car*_*ant 6

是.您需要调用unsubscribe返回的订阅.

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

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

如果您希望observable停止调用该next函数并释放与订阅相关的任何资源(包括从next函数中引用的资源),则必须调用unsubscribe.

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