javascript - 覆盖订阅是否会自动取消订阅以前的值?
问题描述
我在 Angular 应用程序中有以下订阅:
private _sub: Subscription;
在初始化时,我订阅了一个 firebase get 函数:
this._sub = this.service.get('database1').subscribe(
data => {
this.ListOfData = data;
}
);
但根据用户输入,我更改database1
为其他集合,或使用不同的方法而不是get()
.
当我覆盖_sub
之前的流会自动取消订阅,还是我必须在覆盖之前手动完成?
解决方案
简短的回答:不,它没有......我将分享原因的详细信息
每当.subscribe()
被调用时,都会创建一个新的 a 实例,Subscription
其中包含监听 Observable 执行的资源。如果您打电话.subscribe()
和不打电话.unsubscribe()
,您的订阅仍在使用资源。在某些情况下(取决于与 Observable/Subject 关联的逻辑),它可能会导致应用程序出现意外行为并影响性能。这就是为什么最好的做法是在你完成后打电话.unsubscribe()
给你Subscription
。
还有一些称为RxJS 操作符的功能可以帮助您通过根据特定条件自动取消订阅来管理您的订阅。
推荐阅读
- python - 使用 BeautifulSoup4 和 Python 抓取有序列表
- jquery - 在 angularjs 中动态加载 Jquery 选项卡
- node.js - GET 的表达参数长度限制
- c# - c# 如何在 Microsoft Interop Word 中编写
- apache-spark - Hive 内部表和 SparkSql 中的分桶
- sql - 在 SQLITE 3 中按国家/地区选择收入排名前 3 的艺术家
- python - 在连接到 MySQL 的 sqlalchemy 中,我需要在 with 语句之后关闭吗?
- c++ - “Bucket&”类型的引用(非 const 限定)不能用“SortedList”类型的值初始化。如何修复此错误?
- haskell - 使用`Ordering`比较Haskell中的值时如何为`foldr`指定初始值?
- python - 如何在 Google Colaboratory 中以编程方式清除 Python 输出?