Angular 8: дождитесь ответа подписки - PullRequest
0 голосов
/ 07 июля 2019

У меня возникла проблема в моей проверке подлинности, когда я запрашиваю некоторые данные с сервера, и мое решение о маршрутизации зависит от ответа от сервера. Как мне дождаться ответа сервера для следующего шага?

это мой код:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    if (!this._sessionService.user) {
        this._router.navigate(['login']);
        return false;
    }

    this._userServiceProxy.get(this._sessionService.userId).subscribe((user: UserDto) => {
        if (user["result"].shouldChangePassword) {
            this._router.navigate([this.routeToChangePassword()]);
        }
        if ((!route.data || !route.data["permission"])) {
            return true;
        }

        if ((this._permissionChecker.isGranted(route.data["permission"]))) {
            return true;
        }
        this._router.navigate([this.selectBestRoute()]);
        return false;
    })

}

1 Ответ

1 голос
/ 07 июля 2019

Попробуйте это

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (!this._sessionService.user) {
    this._router.navigate(['login']);
    return false;
}

return this._userServiceProxy.get(this._sessionService.userId).pipe(map((user: UserDto) => {
    if (user["result"].shouldChangePassword) {
        this._router.navigate([this.routeToChangePassword()]);
    }
    if ((!route.data || !route.data["permission"])) {
        return true;
    }

    if ((this._permissionChecker.isGranted(route.data["permission"]))) {
        return true;
    }
    this._router.navigate([this.selectBestRoute()]);
    return false;
}))

}

Возвращает наблюдаемое из canActivate и использует pipe + map вместо subscribe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...