1 回答

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊
setter 內(nèi)部是可以異步的,但是既然是異步的,恐怕就不能在設(shè)置值之后馬上就能取得出來,如果用 setTimeout 來模擬異步調(diào)用,
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);
輸出結(jié)果是
first init
second init
third hello
說明 setter 是起作用了的,但是要等待異步調(diào)用結(jié)速,具體時(shí)間并不能確定。如果想確定,可以使用 Callback 或者 Promise,而且不是用 setter,而是用 set 函數(shù),比如(使用 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));
})();
這里的輸出就已經(jīng)等待到異步過程結(jié)束了
添加回答
舉報(bào)