我需要手动取消订阅吗? - Angular 8

Do I need to unsubscribe manually? - Angular 8

我有一个简单的问题。 我是否需要手动取消订阅或 Angular 正在为我取消订阅,或者如果不取消订阅如何理解正在发生的事情?

谢谢。

在大多数情况下 - 是的。订阅时,几乎任何时候都必须取消订阅。但也有一些例外情况,您不必这样做,例如订阅 http 服务。

是的,您需要退订,有一些例外情况,例如 route 相关的可观察值。

您可以在这里找到不同的退订方式https://blog.bitsrc.io/6-ways-to-unsubscribe-from-observables-in-angular-ab912819a78f

如果您使用的是 async 管道,Angular 会在组件生命周期内为您处理订阅、订阅和取消订阅。

如果您已在组件内订阅,则在可观察对象未完成时需要取消订阅。

这里有一个非常 post 的主题(双关语!)。

是的,在很多情况下。如果不这样做,可能会导致内存泄漏。比如在组件中订阅ngOnInt()中的一个observable,在ngOnDestroy()中取消订阅是正常的。

如前所述,您并不总是必须手动取消订阅,例如在使用某些特定运算符(如 take 时)。如果您在模板中使用 async,则无需手动取消订阅。此外,也没有必要取消订阅已注册一次的服务中的 Observables。