我需要手动取消订阅吗? - Angular 8 [重复]
Posted
技术标签:
【中文标题】我需要手动取消订阅吗? - Angular 8 [重复]【英文标题】:Do I need to unsubscribe manually? - Angular 8 [duplicate] 【发布时间】:2020-07-23 15:35:40 【问题描述】:我有一个简单的问题。 我是否需要手动取消订阅,或者 Angular 正在为我取消订阅,或者如果不知道发生了什么?
谢谢。
【问题讨论】:
您必须手动取消订阅 @Supercool - 谢谢 【参考方案1】:是的,在很多情况下。如果不这样做,可能会导致内存泄漏。例如,订阅 ngOnInt()
中的 observable 并在组件中取消订阅 ngOnDestroy()
是很正常的。
如前所述,您不必总是手动取消订阅,例如在使用某些特定运算符(如 take
)时。如果您在模板中使用async
,则无需手动取消订阅。此外,注册一次的服务也不需要取消订阅 Observables。
【讨论】:
【参考方案2】:如果您使用async
管道,Angular 会在组件生命周期内为您处理订阅、订阅和取消订阅。
如果你在一个组件中订阅了,如果 observable 没有完成,你需要取消订阅。
这是一个非常 SO 主题的帖子(双关语!)。
【讨论】:
【参考方案3】:是的,您需要取消订阅,但有一些例外情况,例如 route
相关的 observable。
您可以在这里找到不同的退订方式https://blog.bitsrc.io/6-ways-to-unsubscribe-from-observables-in-angular-ab912819a78f
【讨论】:
【参考方案4】:我在大多数情况下 - 是的。当您订阅时,您几乎必须随时取消订阅。但也有一些例外情况您不必这样做,例如订阅 http 服务。
【讨论】:
以上是关于我需要手动取消订阅吗? - Angular 8 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
我应该取消订阅根 Angular 组件中的 observables 吗?
我们是不是需要取消订阅 Angular 中的 http 调用? [复制]