Я работаю над собственным реактивным проектом, и чтобы упростить манипулирование пользователями, я создал класс User, который подключается к базе данных firebase для получения всей информации о пользователе (например, имя).
Но у меня есть проблема, код запускается асинхронно.Если я хочу сделать:
User.getCurrentUser().alertName(); // Display "undefined"
Функция alertName()
запускается перед конструктором класса User, в котором инициализируется имя, поэтому эта строка просто записывает "undefined".
ЗдесьКласс пользователя:
class User {
uid;
object;
name;
constructor(id){
firebase.database().ref('/user/'+id).once('value').then( function (snapshot) {
this.object = snapshot.val();
this.uid = id;
this.name = this.object.name;
console.log("In constructor : " + this.name);
});
}
alertName(){
console.log("From function : " + this.name);
}
static getCurrentUser(){
let id = firebase.auth().currentUser.uid;
return new User(id);
}
}
При попытке сделать:
User.getCurrentUser().alertName();
Журнал консоли:
Из функции: undefined
ИзКонструктор: Джон
Функция выполняется перед конструктором, поэтому, конечно, имя не определено ...
Как это исправить?