首页 > 解决方案 > 覆盖订阅是否会自动取消订阅以前的值?

问题描述

我在 Angular 应用程序中有以下订阅:

  private _sub: Subscription;

在初始化时,我订阅了一个 firebase get 函数:

this._sub = this.service.get('database1').subscribe(
   data => {
      this.ListOfData = data;
   }
);

但根据用户输入,我更改database1为其他集合,或使用不同的方法而不是get().

当我覆盖_sub之前的流会自动取消订阅,还是我必须在覆盖之前手动完成?

标签: javascriptangularrxjs

解决方案


简短的回答:不,它没有......我将分享原因的详细信息

每当.subscribe()被调用时,都会创建一个新的 a 实例,Subscription其中包含监听 Observable 执行的资源。如果您打电话.subscribe()和不打电话.unsubscribe(),您的订阅仍在使用资源。在某些情况下(取决于与 Observable/Subject 关联的逻辑),它可能会导致应用程序出现意外行为并影响性能。这就是为什么最好的做法是在你完成后打电话.unsubscribe()给你Subscription

还有一些称为RxJS 操作符的功能可以帮助您通过根据特定条件自动取消订阅来管理您的订阅。


推荐阅读