我有一个Ionic 4应用程序,可以在其中使用"cloud" service (http).
获取用户列表
cloud.getRemoteAccessUsers
是一种asynchronous
方法,但是我无法在服务中进行编辑。
我想为检查用户创建一个保护措施,我将粘贴一个代码段。
我想让console.log(test)
显示一个数组,但只返回ZoneAwarePromise
。
canActivate(route: ActivatedRouteSnapshot): boolean {
this.lock = this.cloud.getLocks().find(x => +x.Id === +route.paramMap.get('id'));
let test = this.cloud.getRemoteAccessUsers(this.lock).then((data) => {
return data;
});
console.log(test);
return false;
}
答案 0 :(得分:2)
CanActivate界面也可以返回Promise<boolean>
或Observable<boolean>
您可以直接返回您的观测值:
canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {
this.lock = this.cloud.getLocks().find(x => +x.Id === +route.paramMap.get('id'));
return this.cloud.getRemoteAccessUsers(this.lock).then((data) => {
return data;
});
}
如果data
不是布尔值,则可以在callback
中编写逻辑以返回boolean
。
您当前的测试日志将显示ZoneAwarePromise
,因为它是异步调用,因此您记录的是promise
,而不是promise
返回的值。
如果它是您想要的值,则可以将data
记录在.then
内
return test = this.cloud.getRemoteAccessUsers(this.lock).then((data) => {
console.log(data)
return data;
});
您也可以使用async/await
:
async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {
this.lock = this.cloud.getLocks().find(x => +x.Id === +route.paramMap.get('id'));
const test = await this.cloud.getRemoteAccessUsers(this.lock);
console.log(test);
return test;
}
答案 1 :(得分:0)
您尝试返回Promise
,但不返回数据
如果您想在Promise
方法内部解析CanActivate
,则将test
分配移到then
内。
canActivate(route: ActivatedRouteSnapshot): boolean {
this.lock = this.cloud.getLocks().find(x => +x.Id === +route.paramMap.get('id'));
this.cloud.getRemoteAccessUsers(this.lock).then((data) => {
let test = data;
console.log(test);
});
return false;
}