gpt4 book ai didi

Angular 2/Rxjs : do I really need to unsubscribe?

转载 作者:太空狗 更新时间:2023-10-29 17:07:04 26 4
gpt4 key购买 nike

我知道当组件被销毁时我必须取消订阅某些 Observable(即:具有 infinite 值的 Observable)以防止内存泄漏。对于 finite Observable,我不需要这样做,因为它们会完成并自动unsubscribe

但是如果我在我的组件中创建一个infinite 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(); })
}

关于 Angular 2/Rxjs : do I really need to unsubscribe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com