2017-10-18 75 views
0

在我的情况下,我正在使用身份验证警戒CanActivate()限制每个路由的用户访问权限,但条件值取自http请求Promise对象。我如何访问Promise然后()并捕获()并将其返回给CanActivate(): Boolean函数?如何将promise返回()/ catch()结果给包含promise的函数?

我的代码看起来像这样。

// 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 
    }); 
} 

我仍然无法弄清楚如何解决这个问题。

回答

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); 
     }); 

    }); 

} 
+0

嗨,我会尝试这一个,但只是好奇,结果仍然有效使用这个对'{路径:“一些路径/”,成分:ClientComponent,canActivate: [AuthGuard]}'? –

+0

@ ShiftN'Tab当然,它是'canActivate'函数的一个变体 –

+0

我非常感谢你! –

相关问题