gpt4 book ai didi

angular - 有没有什么时候我不需要在组件中处理取消订阅的例子?

转载 作者:行者123 更新时间:2023-12-03 22:12:05 24 4
gpt4 key购买 nike

我已经习惯于取消订阅我在组件中初始化的订阅。推荐的方法是使用 takeUntil 运算符,如下所示:

killSubscriptions: new Subject<any> = new Subject();

ngOnInit(){
observableThing().pipe(takeUntil(this.killSubscriptions)).subscribe()
}

ngOnDestroy(){
this.killSubscriptions.next();
this.killSubscriptions.complete();
}

但是前几天我正在使用覆盖和门户服务实现一个自定义对话框,并且我在 this block of code 中的一个方法中间遇到了 Angular Material Library
// When the dialog backdrop is clicked, we want to close it.
if (config.hasBackdrop) {
overlayRef.backdropClick().subscribe(() => {
if (!dialogRef.disableClose) {
dialogRef.close();
}
});
}

这个订阅是如何清理的?我唯一的猜测是当 overlayRef 被处理时,订阅被清理。但是如何?

还有其他时候我们不需要处理取消订阅吗?

最佳答案

简答
因为当 OverlayRef 被认为进入处置状态时,它们完成了观察者。

this._backdropClick.complete();
Angular Material CDK source code
希望这有帮助! 浏览源代码并尝试理解它是一种很好且有趣的学习方式:)
编辑:如果您不确定您的观察者是否会完成,那么您需要确保主动取消订阅以避免内存泄漏。你的 takeUntil 模式是一种方法。您甚至可以将主题的类型从 any 更改为 void

关于angular - 有没有什么时候我不需要在组件中处理取消订阅的例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53637968/

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