如何在Ionic 4中处理Route Guard和Async ionic.storage?

时间:2019-06-04 16:15:43

标签: asynchronous routing jwt ionic4 guard

我想使用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);
  }

在这种情况下,我想避免使用事件广播。我应该使用异步/等待还是其他方式?任何示例表示赞赏。

1 个答案:

答案 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)
}