在我的情况下,我正在使用auth guard CanActivate()
限制每条路由的用户访问权限,但是条件值来自http请求Promise对象。如何访问Promise then()和catch()并将其返回到CanActivate(): Boolean
函数?
我的代码看起来像这样。
// On AuthService
verfifyUser(): Promise<any> {
return this.http
.get(`api/auth/verify-user`, { headers: this.headers })
.toPromise()
.then(res => res.json() as any);
}
// On AuthGuardService
CanActivate(): Boolean {
this.authSrv.verfifyUser(some_user).then(result => {
// return true
}).catch(err => {
// return false
});
}
我仍然无法弄清楚如何解决这个问题。
答案 0 :(得分:4)
CanActivate界面的canActivate
方法的返回类型为Observable<boolean>|Promise<boolean>|boolean
。
您可以使用canActivate(): Promise<boolean>
版本并返回Promise。在函数中你可以写
canActivate() : Promise<boolean> {
return new Promise( resolve => {
this.authSrv.verfifyUser(some_user).then(result => {
resolve(true);
}).catch(err => {
resolve(false);
});
});
}