我想使用Guard与异步获取存储在异步本地存储中的用户令牌。我尝试了以下操作:
canActivate(): boolean {
return this.lsProvider
.getValue(Constants.KEY_USER_TOKEN)
.map(value => value != null)
.first();
我也尝试使用订阅但没有运气的方法:
this.lsProvider
.getValue(Constants.KEY_USER_TOKEN).subscribe(isSuccess => {
if (isSuccess) {
return true;
}
else{
return false;
}
}
helper方法正在执行并返回Promise
getValue(key: string) {
console.log("getValue " + key);
return this.storage.get(key);
}
在这种情况下,我想避免使用事件广播。我应该使用异步/等待还是其他方式?任何示例表示赞赏。
答案 0 :(得分:0)
从{strong> Angular docs 的接口canActivate
可以看出,返回类型可以是可观察的,应许的,也可以是布尔值(以及其他):
interface CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree
}
因此,如果getValue()
返回承诺,则可以这样使用canActivate
:
public canActivate(): Promise<boolean> {
return this.lsProvider
.getValue(Constants.KEY_USER_TOKEN)
.then(value => value != null)
}