首页 > 解决方案 > 为什么这个 Angular Rxjs 观察者不退订?

问题描述

我正在尝试管理内存泄漏。所以要做的一件事就是取消订阅观察者。

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

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

我花了很多时间在这上面,因为它应该很简单。

谢谢你的帮助。

标签: angularrxjs

解决方案


您的代码中有几个问题:

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

ts

controllerSubscription: Subscription;

ngOnInit() {
  const controllerObserver = this.getObserverIncrements();
  this.controllerSubscription = controllerObserver.subscribe((nextVal) => {
    this.valueFromSubscriptionNext = nextVal;
  });
}
  • 您没有清除unsubscribeObservable 返回的方法中的间隔

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);  
  }};
});

分叉的 Stackblitz


推荐阅读