为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2019-03-12 16:15:18
get prop() {    return this.list}set prop(pm = {}) {    ReqApi.get({        url: Urls.GET_ENQUIRYLIST,        pm    })        .then(res => {            this.list = res.list        })}这样好像不行呢!
查看完整描述

1 回答

?
精慕HU

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));

})();

这里的输出就已经等待到异步过程结束了


查看完整回答
反对 回复 2019-04-04
  • 1 回答
  • 0 关注
  • 425 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信