Я бы хотел, чтобы значение одного из свойств в моем классе было асинхронным.Это почти работает;когда вы звоните setTimeout
, profile.songs
фактически разрешается с Promise {<resolved>: Array(100)}
.
Кроме того, я хочу, чтобы значение (в данном случае Array(100)
) Promise
было значением property.songs
.
Редактировать: Iследует добавить некоторую ясность в вопрос.Объект должен создаваться синхронно, то есть profile.toxicGarbageIsland
и profile.spiceUpYourLife
являются обязательными и необходимы для создания объекта.Однако значение обещания profile.songs
является необязательным и может прийти после создания экземпляра объекта.
class Gojira {
constructor (profile) {
Object.assign(this, profile)
}
static init () {
let profile = {};
profile.toxicGarbageIsland = true;
profile.spiceUpYourLife = false;
profile.songs = axios.get('https://jsonplaceholder.typicode.com/posts')
.then(function(response){
return response.data;
}).catch(function (error) {
console.log(error)
})
return new Gojira(profile);
}
}
let gojiraInstance = Gojira.init();
setTimeout(function(){
console.log(gojiraInstance)
}, 2000)
NB. Я удалил обещание из constructor
, чтобы убедиться, что его заботой является только возврат экземпляра объекта, который, как я прочитал, является лучшей практикой.