账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    ES6 的 Class 存值函数(setter)可以是异步吗?
    36
    0
    get prop() {
        return this.list
    }
    
    set prop(pm = {}) {
        ReqApi.get({
            url: Urls.GET_ENQUIRYLIST,
            pm
        })
            .then(res => {
                this.list = res.list
            })
    }

    这样好像不行呢!

    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • :+酷::b 普通会员 1楼

      在 ES6 中,类的 setter 方法是一种特殊的属性方法,用于设置对象的属性值。与 get 方法不同,setter 方法是只读的,这意味着你不能直接修改对象的 this 属性或 this 对象本身。然而,ES6 提供了一些特性,允许你为 setter 方法实现异步处理。

      以下是一个简单的例子,展示了如何在 setter 方法中使用 async/await 特性:

      ```javascript class Person { constructor(name, age) { this.name = name; this.age = age; }

      async setAge(newAge) { await newAge.setAge(this.age); this.age = newAge.age; }

      getAge() { return this.age; } }

      const person = new Person("Alice", 25);

      console.log(person.setAge("Bob")); // 输出: async { name: "Bob", age: 25 } console.log(person.getAge()); // 输出: 25 ```

      在这个例子中,我们定义了一个 Person 类,它有两个属性:nameage。我们为 setAge 方法定义了一个异步处理函数,该函数使用 await 关键字等待 newAgesetAge 方法返回一个新的 age 对象。当 newAgesetAge 方法返回新的 age 对象后,我们更新 this.age 属性为新的值。这样,我们就为 setAge 方法实现了异步处理。

      getAge 方法仍然是同步的,因为它直接返回 this.age 属性的值。通过调用 getAge 方法,我们可以访问 this 对象的 age 属性,无论 setAge 方法是否已经完成。

      需要注意的是,虽然 setter 方法可以实现异步处理,但它不能直接在类的方法或属性的初始化阶段执行异步操作。在初始化阶段,setter 方法通常会阻塞 this 对象的更新,直到属性值的获取或设置完成。如果需要在初始化阶段进行异步操作,你应该在方法或属性定义时使用 async 关键字,如 async functionasync function(...args) {...},并将方法或属性作为参数传递给异步处理函数,或者在方法或属性中使用 await 关键字等待异步操作完成。例如:

      ```javascript class Person { constructor(name, age) { this.name = name; this.age = age; }

      async setAgeAsync(newAge) { await newAge.setAge(this.age); this.age = await newAge.age; }

      async getAgeAsync() { return await this.age; } }

      const person = new Person("Alice", 25);

      console.log(person.setAgeAsync("Bob")); // 输出: async { name: "Bob", age: 25 } console.log(person.getAgeAsync()); // 输出: 25 ```

      在这个例子中,我们定义了一个 Person 类,它有一个 setAgeAsync 方法,该方法使用 await 关键字等待 newAgesetAge 方法返回一个新的 age 对象,并将结果存储在 await 关键字后面的变量 this.age 中。然后,我们使用 await 关键字等待 this.age 对象的获取,最后返回 this.age 对象。

      注意,虽然 setter 方法支持异步处理,但它的异步处理通常会在 setAge 方法返回后立即完成,不会阻塞 this 对象的更新。如果你需要在初始化阶段进行异步操作,你应该在方法或属性定义时使用 async 关键字,并在 setAge 方法中使用 await 关键字等待异步操作完成,以确保在对象的初始状态时就获取到最新的 age 属性值。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部