#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.обновляет значение, но с опозданием из-за асинхронной подписки. Попробуйте получить и установить токен