сигнатурный
Знаток
(338)
1 неделю назад
Вы правы, конструктор класса не может быть асинхронным, и непосредственно использовать await в конструкторе нельзя. Однако, вы можете использовать другие методы для достижения вашей цели. Вам нужно получить логин пользователя асинхронно и затем присвоить его полю userLogin. Можно сделать это, например, с помощью асинхронного метода в классе User, который будет вызываться после создания экземпляра класса. Вот пример, как это можно сделать:
typescript
export class User extends UserAbstract {
userLogin: string // добавляем поле userLogin
constructor(public userId: number) {
super();
}
async initializeUserLogin() {
this.userLogin = await getUserLogin(this.userId); // вызов асинхронной функции и присвоение userLogin
}
}
Теперь при создании объекта User инициализация его логина может быть выполнена асинхронно, например:
typescript
const user = new User(123); // создание объекта
user.initializeUserLogin().then(() => {
console.log(user.userLogin); // здесь userLogin уже будет доступен
});
Таким образом, вы можете использовать асинхронный метод initializeUserLogin для установки userLogin после того, как объект User был создан.
У меня есть такой класс В другом файле есть собственно класс UserAbstract И функция в третьем файле В классе User мне нужно присвоить полю userLogin результат асинхронной функции getUserLogin, но как это сделать, если конструкторы классов не позволяют использовать await?
Избавиться от асинхронности не вариант, а если делать через промисы, тогда при обращении В какой-нибудь функции будет возвращен Promise<>, а не сама строка логина