ES6 的 Class 存值函数(setter)可以是异步吗?

get prop() {

    return this.list

}


set prop(pm = {}) {

    ReqApi.get({

        url: Urls.GET_ENQUIRYLIST,

        pm

    })

        .then(res => {

            this.list = res.list

        })

}

这样好像不行呢!

慕码人8056858
浏览 426回答 1
1回答

精慕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));})();这里的输出就已经等待到异步过程结束了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript