【发布时间】:2019-05-19 12:17:22
【问题描述】:
只是好奇是否需要取消订阅未被引用的Subscription 实例?例如this demo 调用:
onSubmit(creds: Creds) {
this.authService.login(creds).subscribe();
}
因此,每次有人登录时都会创建并返回 Subscription 实例,但它没有句柄。
IIUC 这些只会被垃圾收集,但为了安全起见,我会仔细检查。
【问题讨论】:
-
是的,这些需要在 OnDestroy() 方法中捕获和取消订阅
-
如果我们不这样做会造成内存泄漏?
-
是的,当然可以
-
您不必取消订阅将完成的可观察对象,但您需要注意它在引用它的对象的生命周期内完成。对于组件,这是在调用 OnDestroy 之前。
-
Observables 不必完成。完成一个 observable 并不能防止内存泄漏,但是永远订阅一个永远不会完成的 observable 会造成内存泄漏。因此,需要担心的是订阅者而不是发射器(即可注入服务)。
标签: javascript node.js angular typescript rxjs