从Angular 5的Guard中的订阅中返回布尔值

时间:2018-10-01 13:21:09

标签: angular angular5 observable guard subscribe

我正在尝试返回true,以防订阅返回我数据。然后如果出现错误,我希望它返回我为假。

更深入地说,如果没有cookie,我的订阅将返回我。如果有cookie,我想给我返回True并订阅另一个函数,如果订阅出错,则返回False。

如果有Cookie,则必须订阅另一个返回值的函数。因此,我在另一个订阅服务器中有一个订阅服务器,如果它们都向我返回一个我希望它为TRUE的值。

让我告诉我我的代码:

A.name()

基本上,我需要控制我的浏览器是否具有cookie并授权员工,如果没有,则返回false。

这不起作用:

name()

1 个答案:

答案 0 :(得分:0)

您似乎不太熟悉后卫/分解器。保护和解析器将由路由器调用。如果您保卫返回一个Promise或Observable路由器将等待,直到它们解决。

在这种情况下,您将在方法中进行异步调用,但未返回promise / obversable,因此,防护只会返回“ undefined”(是,您在调用中返回false并返回true,但是稍后会执行没人会考虑)。

这是一种使用await / async promise进行操作的简单方法(这也可以通过Observable完成)

async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
 try {
 const cookie = await this.secureService.config({
    controlType: (this.env.useCookiesFromSTS
        ? SecurityConstant.COOKIE_CONTROL_TYPE
        : SecurityConstant.TOKEN_CONTROL_TYPE
    ),
    advanceTime: this.env.securityConfig_advanceTime,
    isDebug: false,
    isSecure: this.env.securityConfig_isSecure,
    whiteList: ['directline.botframework.com']
  }, {
    urlService: this.env.endpoints_urlSCC,
    urlAttrUser: this.env.endpoints_urlUDS
  },  this.env.appName).toPromise();

  if(cookie){
    const user = await this.secureService.getAttrUser(['ComTipoEmpleado'], ['']).toPromise();
    return user != null;
  }else{
    return false;
  } 
 } catch(err) {
   return false;
 }  
}