Глобальная переменная typescript не обновляется после ее присвоения в подкрибе

#angular #typescript #scope

Вопрос:

Это файл службы аутентификации, в котором я присвоил значение токена глобальной переменной this.token, но я не могу получить значение этого.token за пределами подписки. Поскольку я новичок в этом деле, пожалуйста, укажите на ошибки, которые я совершил для этого. Ваши ответы будут очень признательны!

 import { Injectable } from '@angular/core';
import {HttpClient} from '@angular/common/http';
import { Router } from '@angular/router';
import { User } from './user.model';

@Injectable({providedIn: 'root'})
export class AuthService {

  private token: string;

  constructor(
    private httpClient: HttpClient,
    private router: Router
  ){
  }

  getToken() {
    return this.token;
  }

  signup(username: string, email: string, password: string) {
    const user: User = {
      username: username,
      email: email,
      password: password
    }

    this.httpClient.post<{success: boolean, message: string}>('http://localhost:3000/signup', user)
    .subscribe((responseData) => {
      if(!responseData.success){
        console.log(responseData.message)
      }
      else{
        console.log(responseData.message)
      }
    })
  }

  login(email: string, password: string){
    const user: User= {
      username: null,
      email: email,
      password: password
    }

    this.httpClient.post<{token: string}>('http://localhost:3000/login', user)
    .subscribe((responseData) => {

      const auth_token = responseData.token;
      this.token = auth_token;
      console.log(this.token)
    })
    console.log(this.token)
  }

} 

Комментарии:

1. согласно моему пониманию, вы получите значение в этом.токене, но будет задержка, потому что использование подписки в службе аутентификации. пожалуйста, поделитесь консолью. журнал и ошибки, которые помогут нам разобраться в проблеме

2. Первый console.log() дает значение токена, но второй после этого дает неопределенное значение.

3. Потому что это вне асинхронной подписки

4. Да, @Phix, я узнал об этом от Google, но я не знаю, как получить это значение из асинхронной подписки. Можете ли вы рассказать мне, как это сделать?

5. Насколько я понимаю, ваш токен this.обновляет значение, но с опозданием из-за асинхронной подписки. Попробуйте получить и установить токен