【问题标题】:Observable<boolean> is not working properlyObservable<boolean> 无法正常工作
【发布时间】:2020-04-14 21:14:15
【问题描述】:

我正在尝试使用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;
  })
);

}

【问题讨论】:

    标签: angular typescript angular-router-guards


    【解决方案1】:

    你需要返回 observable。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2012-02-11
      相关资源
      最近更新 更多