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

Angular 如何将promise then()/catch()结果返回给包含promise的函数?,angular,typescript,Angular,Typescript,在我的情况下,我使用auth-guardCanActivate()限制用户对每个路由的访问,但是条件值取自http请求承诺对象。如何访问Promise then()和catch()并将其返回到CanActivate():Boolean函数 我的代码看起来像这样 // On AuthService verfifyUser(): Promise<any> { return this.http .get(`api/auth/verify-user`, { headers

在我的情况下,我使用auth-guard
CanActivate()
限制用户对每个路由的访问,但是条件值取自http请求承诺对象。如何访问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 
    });
}
//在AuthService上
承诺{
返回此文件。http
.get(`api/auth/verify user`,{headers:this.headers})
.toPromise()
.then(res=>res.json(),如有);
}
//关于AuthGuardService
CanActivate():布尔值{
this.authSrv.verfifyUser(某些用户)。然后(结果=>{
//返回真值
}).catch(错误=>{
//返回错误
});
}

我仍然不知道如何解决这个问题。

接口的
canActivate
方法的返回类型是
Observable | Promise | boolean

您可以使用
canActivate():Promise
version并返回承诺。在函数中,您可以编写

canActivate() : Promise<boolean> {

   return new Promise( resolve => {

      this.authSrv.verfifyUser(some_user).then(result => {
         resolve(true);
      }).catch(err => {
         resolve(false);
      });

   });

}
canActivate():承诺{
返回新承诺(解决=>{
this.authSrv.verfifyUser(某些用户)。然后(结果=>{
决心(正确);
}).catch(错误=>{
决议(假);
});
});
}

接口的
canActivate
方法的返回类型为
Observable | Promise | boolean

您可以使用
canActivate():Promise
version并返回承诺。在函数中,您可以编写

canActivate() : Promise<boolean> {

   return new Promise( resolve => {

      this.authSrv.verfifyUser(some_user).then(result => {
         resolve(true);
      }).catch(err => {
         resolve(false);
      });

   });

}
canActivate():承诺{
返回新承诺(解决=>{
this.authSrv.verfifyUser(某些用户)。然后(结果=>{
决心(正确);
}).catch(错误=>{
决议(假);
});
});
}

您好,我会试试这个,但对结果很好奇,在“{path:'some path/”,component:ClientComponent,canActivate:[AuthGuard]}”上使用它仍然有效?@ShiftN'Tab当然可以,这是
canActivate
函数的一个变体。在这里,我会尝试这个,但对结果很好奇,在{path:'some path/',component:ClientComponent,canActivate:[AuthGuard]}上使用它仍然有效?@ShiftN'Tab是的,这是
canActivate
函数的一个变体