【发布时间】:2019-08-13 22:02:03
【问题描述】:
我正在制作一个具有 routeGuard 访问权限的 Angular 应用程序。 routeGuard 询问后端服务当前用户的角色。这按预期工作。当用户在页面上停留一定时间没有做任何事情,然后返回导航到另一个路由时,后端服务器崩溃(WebApi)。
我认为仍然有订阅或 observable 在后台运行,从 routeGuard 到我的后端服务的 http 请求。后端服务使用 IIS,所以它会在 20 分钟后进入 IDLE 模式。然后用户返回但未找到请求或进入错误模式?
我尝试使用 pipe(take(1)) 并且它目前似乎可以工作,但我想 100% 确定这是问题所在。
下面的方法是否有一些内存泄漏或者它是否让 observable 保持活动状态?
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if(this.backendService.isAuthenticated) {
return true;
}
else {
return this.http.get<User>(this.appConfig.user)
.pipe(
map(
(user) => {
this.backendService.initializeUser(user);
return this.backendService.isUserInitialized();
}
),
catchError(<T>(error: any, result?: T) => {
this.backendService.showError()
return of(true);
})
)
;
}
}
【问题讨论】:
标签: javascript angular typescript