Функция, которая возвращает true, если http.get был успешным в функции Guard canActivate - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу создать функцию, которая будет возвращать true, если http.get был успешным, в противном случае возвращает false. Я пытался что-то вроде этого:

  isOk() {
    let isOk;
    this.http.get('ip/api/isOk')
      .subscribe(x => { isOk = true; }, 
      (err) => { isOk = false; });
    return isOk;
  }

Но он возвращает undefined. Я знаю, что это asyn c функция, поэтому она возвращает значение до завершения http.get. Как я могу создать функцию, которая возвращает true / false после «получения» данных от REST API?

edit: я хочу использовать эту функцию в функции Guard canActivate. Я не знаю, как я могу построить оператор IF с наблюдаемым.

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
      let x = this.someService.isOk();
      if(...){//if isOk return true
         return true;
      }else{
        this.router.navigate(['/login']);
      }
  }

1 Ответ

0 голосов
/ 18 апреля 2020

Вы пытаетесь смешать несовместимые вещи: син c и асин c код. http.get - это asyn c, что означает в точности следующее: в большинстве случаев нет результата в тот момент, когда ваш код возвращается обратно к вызывающей стороне; вот почему undefined - единственное разумное значение для возврата.

Как только вы придерживаетесь asyn c worflow, держитесь бесконечно. В вашем конкретном случае вы можете захотеть вернуть Observable<boolean> обратно вызывающей стороне и позволить ему subscribe(), а не делать это самостоятельно. Consoder pipe() и map() или tap() определены как операторы на Observable<>. rx js документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...