精慕HU
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 initsecond initthird 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));})();这里的输出就已经等待到异步过程结束了