Наблюдаемый <boolean>не работает должным образом - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь реализовать охрану, используя userService, чтобы получить необходимую информацию. В настоящее время UserService выглядит следующим образом:

  getUserDetails(): Observable<User> {
    this.requestUrl = `${configs.bgwssApi}v1/user/details`;
    return this.http.get<User>(this.requestUrl).pipe(catchError(this.handleError));
  }

  isBoardMember(): Observable<boolean> {
    this.getUserDetails().pipe(
      map(data => {
        if (data.userRole !== 'MEMBER') {
          return of(false);
        }
        console.log(data); //Not printed
      })
  );
    return of(true);
  }

getUserDetails работает нормально, он возвращает необходимую информацию. Но isBoardMember всегда возвращает true, так как я заметил, что он даже не проверяет userRole. В чем может быть проблема здесь? Как исправить isBoardMember, чтобы он возвращал правильное значение, потому что позже мой охранник выполняет такую ​​проверку, которая работает нормально, кстати:

canActivate(route: ActivatedRouteSnapshot,
          state: RouterStateSnapshot): Observable<boolean> {
return this.userService.isBoardMember().pipe(
  map(data => {
    if (data === false) {
      this.router.navigate(['main']);
      return false;
    }
    return true;
  })
);

}

1 Ответ

3 голосов
/ 14 апреля 2020

Вам нужно вернуть наблюдаемое.

isBoardMember(): Observable<boolean> {
    return this.getUserDetails().pipe(map(data => {
        return !(data.userRole !== 'MEMBER');
    }));
}
...