覆盖订阅是否会自动取消订阅之前的值?
我在角度应用程序中有以下订阅:
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 操作符的函数,可以通过根据某些条件自动取消订阅来帮助您管理订阅。