Angular 9 TypeError: невозможно прочитать свойство «подписаться» неопределенного значения. - PullRequest
0 голосов
/ 01 августа 2020

То, что я пытаюсь выполнить sh, - это посмотреть, существует ли уже сеанс пользователя, и, если да, зарегистрируйте его. Но у меня возникают проблемы с тем, как это правильно выполнить. Скорее всего, это связано с порядком выполнения кода, но я не понимаю, что делать, чтобы решить эту проблему. Возможно asyn c?

Получение:

TypeError: невозможно прочитать свойство 'subscribe' неопределенного

Sidebar.component.ts:

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

auth.service.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 Ответ

2 голосов
/ 01 августа 2020

Вы подписываетесь на наблюдаемое здесь, но не возвращаете наблюдаемое из получателя. return of(true), который у вас там, возвращается изнутри обратного вызова subscribe, а не из геттера. Вам придется изменить его, чтобы вернуть исходный наблюдаемый из функции 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);
  }
}

Хотя я полагаю, что геттер здесь может вызвать проблемы с несколькими подписками где-то в дальнейшем.

...