我正在尝试返回true,以防订阅返回我数据。然后如果出现错误,我希望它返回我为假。
更深入地说,如果没有cookie,我的订阅将返回我。如果有cookie,我想给我返回True并订阅另一个函数,如果订阅出错,则返回False。
如果有Cookie,则必须订阅另一个返回值的函数。因此,我在另一个订阅服务器中有一个订阅服务器,如果它们都向我返回一个我希望它为TRUE的值。
让我告诉我我的代码:
A.name()
基本上,我需要控制我的浏览器是否具有cookie并授权员工,如果没有,则返回false。
这不起作用:
name()
答案 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;
}
}