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

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

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

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();
阅读 10.4k
2 个回答

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()
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏