Как я могу получить значение обещания выполнить проверку на canActivate?

Мне нужно получить значение, которое возвращает this.isJwtValid(), но в настоящее время оно не возвращает значение результата promise, код продолжает свой поток, не останавливаясь на достигнутом, и мне нужно получить результат этого promise в этой строке:

let token = this.isJwtValid() //I need get the value of the promise in this line

продолжить свою логику.

как мне это сделать?

это мой код:

export class verificarToken implements CanActivate {
  constructor(private router: Router, private storage: Storage) {}

  async isJwtValid() {
    const jwtToken: any = await this.storage.get("token");
    console.info(jwtToken); /// this is showed second
    if (jwtToken) {
      try {
        return JSON.parse(atob(jwtToken.split(".")[1]));
      } catch (e) {
        return false;
      }
    }
    return false;
  }

  canActivate(ruta: ActivatedRouteSnapshot, estado: RouterStateSnapshot) {

    let token = this.isJwtValid(); //I need get the value of token here
    if (token) {
      console.info(token) // this is showed first
      if (ruta.routeConfig.path == "login") {
        this.router.navigate(["/tabs/tab1"]);
      }
      return true;
    }
    this.storage.clear();
    this.router.navigate(["/login"]);
    return false;
  }
}
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
118
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

CanActivate может возвращать Promise, Observable или Value, так что вы можете сделать это так.


canActivate(ruta: ActivatedRouteSnapshot, estado: RouterStateSnapshot) {

    return this.isJwtValid().then(token => {

            if (token) {
                console.info(token) // this is showed first
                if (ruta.routeConfig.path == "login") {
                    this.router.navigate(["/tabs/tab1"]);

                    return true;
                }
                this.storage.clear();
                this.router.navigate(["/login"]);
                return false;
            });
    }
}

canActivate также может возвращать обещание. следовательно, используйте async/await.

async canActivate(ruta: ActivatedRouteSnapshot, estado: RouterStateSnapshot) {

    let token = await this.isJwtValid(); //I need get the value of token here
    if (token) {
      console.info(token) // this is showed first
      if (ruta.routeConfig.path == "login") {
        this.router.navigate(["/tabs/tab1"]);
      }
      return true;
    }
    this.storage.clear();
    this.router.navigate(["/login"]);
    return false;
  }
}
``

Другие вопросы по теме