Как работать с Route Guard и Async ionic.storage в Ionic 4? - PullRequest
1 голос
/ 04 июня 2019

Я бы хотел использовать Guard с Async для получения токена пользователя, хранящегося в асинхронном локальном хранилище. Я попробовал следующее:

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;
      }
    }

Вспомогательный метод работает следующим образом и возвращает Promise

getValue(key: string) {
    console.log("getValue " + key);
    return this.storage.get(key);
  }

Я бы не хотел использовать трансляцию событий в этом случае. Стоит ли использовать async / await или что-то другое? Любой пример приветствуется.

1 Ответ

0 голосов
/ 04 июня 2019

От Угловые документы интерфейс 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)
}

...