1 回答
TA贡献1845条经验 获得超8个赞
setter 内部是可以异步的,但是既然是异步的,恐怕就不能在设置值之后马上就能取得出来,如果用 setTimeout 来模拟异步调用,
const target = {
data: "init",
get test() {
return this.data;
},
set test(data) {
setTimeout(() => this.data = data, 1000);
}
};
console.log("first", target.test);
target.test = "hello";
console.log("second", target.test);
setTimeout(() => console.log("third", target.test), 1000);
输出结果是
first init
second init
third hello
说明 setter 是起作用了的,但是要等待异步调用结速,具体时间并不能确定。如果想确定,可以使用 Callback 或者 Promise,而且不是用 setter,而是用 set 函数,比如(使用 async 语法)
const target = {
// ....
async setTest(data) {
return new Promise(resolve => {
setTimeout(() => {
this.data = data;
resolve();
}, 1000);
});
}
};
(async () => {
await target.setTest("hi");
console.log(console.log(target.test));
})();
这里的输出就已经等待到异步过程结束了
添加回答
举报