【问题标题】:Why wont this Angular Rxjs observer unsubscribe?为什么这个 Angular Rxjs 观察者不退订?
【发布时间】:2019-12-23 10:51:59
【问题描述】:

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

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: angular rxjs


    【解决方案1】:

    您的代码中有几个问题:

    • 您正在尝试在 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

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 2017-09-21
      • 2018-07-31
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多