【发布时间】:2020-04-28 19:29:03
【问题描述】:
如果用户已登录,我会尝试签入 CanActivate gurad。
如果是,那么我将他导航到某个页面。
如果没有,那么我将他导航到登录页面。
我使用承诺。
我有一个名为 LoginService 的服务:
export class LoginService {
urlcheck = 'http://localhost:80/isconnected.php';
resultCheck;
constructor(private http: HttpClient, private router: Router)
{
}
async checkLogin()
{
const x = await this.updateConnectedState();
return x;
}
updateConnectedState()
{
//formData here...
return this.http.post(this.urlcheck, formData).toPromise()
.then(
(response) =>
{
this.resultCheck = response;
console.log(response);
return this.resultCheck.state; //state is true/false
},
(error) =>
{
console.log(error);
return false;
}
);
}
}
canActivate Gurad:
export class BackHomeGuardService implements CanActivate
{
constructor(private logService: LoginService, private router: Router)
{
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|boolean
{
const result = this.logService.checkLogin();
console.log( result);
if (result)
{
console.log('true');
// navigate to hom page
return true;
}
else
{
console.log('false');
// navigate to login page
return false;
}
}
}
守卫 canActivate 函数总是返回 true。
我检查了控制台,承诺结果是:
__zone_symbol__state: null
__zone_symbol__value: []
我想让 canActive 在它做某事之前等待结果。
如果我的后端(php 代码文件)需要 30 秒才能完成怎么办?
我需要一个解决方案。谢谢。
【问题讨论】: