JavaScript

コンストラクタにasyncを指定するとシンタックスエラーになる

状況

class MyClass {
  async constructor() {
    this.aaa = 'AAA'
    this.bbb = await hogehoge();
  }
}

const ccc = async () => {
  const ddd = await new MyClass();
};
Uncaught SyntaxError: Class constructor may not be an async method

対処法

class MyClass {
  constructor() {
    this.aaa = 'AAA'
  }
  async init() {
    this.bbb = await hogehoge();
  }
}

const createMyClass = async () => {
  const obj = new MyClass();
  await obj.init();
  return obj;
};

const ccc = async () => {
  const ddd = await createMyClass();
};

非同期処理をコンストラクタから分離する。