为什么这个Angular Rxjs观察者不退订?

时间:2019-12-23 10:51:59

标签: angular rxjs

我正在尝试管理内存泄漏。因此,要做的一件事就是退订观察者。

我已经遵循了许多如何创建观察者的示例,它们都可以工作,但是为什么我不能取消订阅该示例?

https://stackblitz.com/edit/angular-wsuqoy?file=src%2Fapp%2Fapp.component.ts

我应该花很多时间,因为它应该很简单。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

您的代码中存在几个问题:

  • 您尝试在Observable上调用unsubscribe方法,但应该在Subscription实例上调用它:

ts

controllerSubscription: Subscription;

ngOnInit() {
  const controllerObserver = this.getObserverIncrements();
  this.controllerSubscription = controllerObserver.subscribe((nextVal) => {
    this.valueFromSubscriptionNext = nextVal;
  });
}
  • 您不会在Observable返回的unsubscribe方法中清除时间间隔

ts

const studentsObservable = new Observable(observer => {
  const firstInterval = setInterval(() => {
      observer.next(this.noReasonIncrement);
  }, 8000);

  const secondInterval = setInterval(() => {
    this.noReasonIncrement++;
  }, 1000);
  return {unsubscribe() {
    clearInterval(firstInterval);
    clearInterval(secondInterval);  
  }};
});

Forked Stackblitz