Mic*_*ael 5 subscriptions unsubscribe observable typescript angular
在查看代码示例时,我经常看到服务内部的可观察对象未被取消订阅的情况。
这是一个例子:
export class AuthGuard implements CanActivate {
private isLoggedIn: boolean;
private isLoggedIn$: Observable<boolean>;
constructor(private authService: AuthService, private router: Router) {
this.isLoggedIn$ = this.authService.isLoggedIn();
this.isLoggedIn$.subscribe(res => {
if (res) {
this.isLoggedIn = true;
}
else {
this.isLoggedIn = false;
}
});
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (this.isLoggedIn) {
return true;
}
else {
this.router.navigate(['login']);
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您是否有理由不取消订阅可观察的 this.isLoggedIn$ ?或者上面的例子只是错误的编码导致内存泄漏?
在查看代码示例时,我经常看到服务内部的可观察对象未被取消订阅的情况。
您正在查看一个错误。
在这种情况下,您是否有理由不取消订阅可观察的 this.isLoggedIn$ ?
如果你想泄漏内存。
或者上面的例子只是错误的编码导致内存泄漏?
是的,它正在泄漏内存。subscribe 函数会在所引用的对象被销毁后继续执行this
。如果这个对象永远不会被销毁,那么这种情况可能永远不会发生,但它是一个在临时创建对象的单元测试中会失败的代码示例。
标记为 的对象@Injectable()
通常表现得像单例或具有弱引用。它可能会工作一段时间,但是一旦你在临时情况下使用它,它就会泄漏内存。
归档时间: |
|
查看次数: |
4785 次 |
最近记录: |