【问题标题】:Angular RouteGuard http mapping memory leakAngular RouteGuard http映射内存泄漏
【发布时间】: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


    【解决方案1】:

    我认为你的问题的根源是别的。所有 HTTP 请求都会自动取消订阅(仍然建议手动取消订阅),所以我认为您运行的订阅不会给您带来内存泄漏。

    HTTP 请求是有限可观察的,您不必取消订阅这些(如果可能的话最好这样做)。

    【讨论】:

    • 在这个 routeguard 中我不使用 'subscribe',所以 observable 也没有取消订阅。 (我认为)
    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2016-04-03
    相关资源
    最近更新 更多