У вас могут быть настраиваемые объекты, но ваши намерения не совсем ясны.Если код должен гарантировать, что экземпляр MyClass
готов, прежде чем использовать его, то следует использовать либо фабричную функцию, возвращающую этот объект, как только он будет готов, либо, если определенные функции зависят от асинхронной загрузки, сделайте эти функции также асинхронными,
Объект, доступный тогда, не мешает вам использовать его до того, как он будет разрешен, так что проектирование не поможет вам с ремонтопригодностью или безопасностью ошибок.
Заводская функция:
function createMyClass(options) {
const myClass = new MyClass();
return loadData(options).then( (result) => {
myClass.loaded = true;
myClass.result = result;
return myClass;
})
}
createMyClass({/*some options*/}).then( myClass => {
console.log(myClass.result);
console.log(myClass.loaded);
})
Загрузить результат по требованию:
class MyClass {
constructor(options) {
this.loaded = false;
this.options = options;
}
result() {
// only request the data if it was not already requested
if (!this._result) {
this._result = loadData(this.options).then(result => {
this.loaded = true
return result
});
}
return this._result
}
}
var myClass = new MyClass({/*....*/})
myClass.result().then(result => {
console.log(result)
})
// could be called another time, and the data is not requested over again,
// as the Promise is reused
myClass.result().then(result => {
console.log(result)
})