如何将promise then()/ catch()返回给包含promise的函数?

时间:2017-10-18 05:44:50

标签: angular typescript

在我的情况下,我正在使用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 
    });
}

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

1 个答案:

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

   });

}