处理这种情况的一种方法是在类上有一个只设置内容的构造函数,以及一个不同的init函数,它可以异步处理获取数据,并在对象正确初始化时通知您。这里有一个例子,我们嘲笑你
thirdPartyMethod
. 调用构造函数时,数组将未定义,但可以调用
init().then()
知道什么时候准备好:
const thirdPartyObject = {
thirdPartyMethod(param1, param2, success, error) {
setTimeout(() => success([{propertyA: "propA0",propertyB: "propB0"}, {propertyA: "propA1",propertyB: "propB1"
}]), 1000)
}
}
class Foo {
constructor(data) {
console.log("making instance")
this.myArray = data;
}
init() {
console.log("starting init")
return new Promise((resolve, reject) => {
thirdPartyObject.thirdPartyMethod(
'param1','param2',
(data) => { //success callback // use arrow function so 'this' works
this.myArray = data.map(item => {
return {
propertyA: item.propertyA,
propertyB: item.propertyB
};
})
console.log("finished init, data ready")
resolve(true)
},
function(data) { //error callback
reject("Error")
}
)
})
}
}
let f = new Foo()
f.init()
.then(() => console.log(f.myArray))
.catch(err => console.log(err))