我需要手动取消订阅吗? - 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 HttpClient取消订阅[重复]

我应该取消订阅根 Angular 组件中的 observables 吗?

您是不是需要取消订阅 Angular 中的路由器参数?

我们是不是需要取消订阅 Angular 中的 http 调用? [复制]

Angular 2 - 订阅 FormControl 的 valueChanges 是不是需要取消订阅?

Angular4最佳实践之unsubscribe