分享
三行代码  ›  专栏  ›  技术社区  ›  Brian van der Stel

角度9类型错误:无法读取未定义的属性“subscribe”

  •  0
  • Brian van der Stel  · 技术社区  · 1 周前

    我要做的是查看用户会话是否已经存在,如果已经存在,请让他们登录。但我对如何正确执行这一点有疑问。它很可能与代码执行顺序有关,但我不知道如何解决此问题。也许是异步的?

    TypeError:无法读取未定义的属性“subscribe”

    侧边栏.component.ts:

    ngOnInit(): void {
    this.authService.isLoggedIn.subscribe(res => {
      if (res){
        this.isLoggedIn = true;
      } else {
       
        this.isLoggedIn = false;
      }
    });
    }
    

    授权服务.ts:

          get isLoggedIn(): Observable<boolean> {
        const authToken = this.cookieService.get('cookiehere');
        // console.log(authToken);
        if (authToken) {
          this.getUserBySession(authToken).subscribe(res => {
            console.log(res);
    
            return of(true);
          }, error => {
            return of(false);
          });
        }
        if (!authToken){
          console.log('No token found!');
          return of(false);
        }
      }
    
    
      getUserBySession(session) {
        return this.http.get(`${this.apiPrefix}/auth/get_user_by_session?session=${session}`, { headers: this.headers })
          .pipe(map((res: any) => {
            if (res.user) {
              this.currentUser = res.user;
              return res;
            } else {
              return res;
            }}));
          }
    
    1 回复  |  直到 1 周前
        1
  •  2
  •   Xetera    1 周前

    您在这里订阅了一个observable,但是没有从getter返回observable。这个 return of(true) 你有内部的回报 subscribe 回调,而不是getter。如果你要从原来的观察到的改变回来 getUserBySession 功能

    get isLoggedIn(): Observable<boolean> {
      const authToken = this.cookieService.get('vmkr');
      if (authToken) {
        return this.getUserBySession(authToken).pipe(
          map(() => true),
          catchError(() => of(false))
        );
      } else {
        console.log('No token found!');
        return of(false);
      }
    }