加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular 2 / Rxjs:我真的需要取消订阅吗?

发布时间:2020-12-17 07:29:21 所属栏目:安全 来源:网络整理
导读:我知道我必须在销毁组件时取消订阅某些Observable(即:具有无限值的Observable)以防止内存泄漏.对于有限的Observables,我不需要这样做,因为它们将完成并自动取消订阅. 但是如果我在我的组件中创建一个无限的Observable(例如FormGroup.valueChanges或QueryLis
我知道我必须在销毁组件时取消订阅某些Observable(即:具有无限值的Observable)以防止内存泄漏.对于有限的Observables,我不需要这样做,因为它们将完成并自动取消订阅.

但是如果我在我的组件中创建一个无限的Observable(例如FormGroup.valueChanges或QueryList.changes),那么这个将被包含它的组件销毁,所以我认为即使我不这样做它们也不会有内存泄漏取消订阅.

这是一个简单的例子:

@Component({})
export class DummyComponent {
    form: FormGroup;

    constructor(private fb: FormBuilder) {
        this.form = this.fb.group({
            firstName: [''],lastName: ['']
        });
        this.form.valueChanges.subscribe(
            x => console.log(x)
        );
    }
}

在这里,我没有取消订阅this.form.valueChanges;当我的组件被销毁时,this.form.valueChanges也将被销毁.

在这种情况下是否会出现内存泄漏?

正如Babar所提到的,您需要进行取消订阅才能阻止这些订阅继续观看更改.

对于你的特殊情况,我认为你有一个观点.

当我在同一组件中有大量订阅时,我做的一件事如下.

首先,我创建“订阅”,一个空的订阅类型数组.

private subscriptions: Subscription[] = [];

然后,每次我需要订阅时,我将它推入数组

this.subscriptions.push(this.form.valueChanges.subscribe(x => console.log(x)));

在ngOnDestroy中,我取消订阅数组中的每个订阅.

ngOnDestroy(): void {
  this.subscriptions.forEach((elem) => { elem.unsubscribe(); })
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读