问答

constructor 里面如何使用 await 或如何设计这个类?

作者:admin 2021-08-11 我要评论

封装了一个类, 初始化成员 的时候获需要使用一个 异步 方法 请问如何使用 同步 初始化这个成员呢? class MyStorage { $data = []; constructor() { try { // ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

封装了一个类,初始化成员的时候获需要使用一个异步方法

请问如何使用同步初始化这个成员呢?

class MyStorage {
  $data = [];

  constructor() {
    try {
      // 请问这怎么用 await 来同步初始化这个类的属性
      const _data = await Storage.getItem('abcd');
      if (_data) {
        this.$data = _data;
      }
    } catch (error) {
      this.$data = [];
    }
  }  
  // ....
}

export const MyABCStorage = new MyStorage();
###

constructor不能是async函数,你可以简单套个自执行函数来使用。

class MyStorage {
  $data = [];

  constructor() {
    (async () => {
      try {
        const _data = await Storage.getItem('abcd');
        if (_data) {
          this.$data = _data;
        }
      } catch (error) {
        this.$data = [];
      }
    })();
  }
}

但这种写法只是让你能在constructor里面写await而已,实例化过程是没有pending

###
class MyStorage {
  static   async getInstance() {
        return Promise.resolve(new MyStorage())
    }
}

async function fn() {
    const myStorage = await MyStorage.getInstance()
}

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • constructor 里面如何使用 await 或如

    constructor 里面如何使用 await 或如

  • mysql.js 模糊查询拼接

    mysql.js 模糊查询拼接

  • ffmpeg如何把webm格式转为mp4格式?

    ffmpeg如何把webm格式转为mp4格式?

  • LUA虚拟机的字节码怎么看?

    LUA虚拟机的字节码怎么看?

腾讯云代理商
海外云服务器