Typescript 类:如何初始化需要多个承诺的变量?

Typescript Classes: How to initialize variables that require multiple promises?

我的objective是在构造函数里面初始化'page'变量。问题是我无法在构造函数内部执行 make async/await promises。 所以我的想法是“哦,只需在 class 中创建一个方法,然后在构造函数中调用它。”但当然,我错了。打字稿仍然对我大喊大叫说页面没有被明确初始化。事实上,如果没有 async/await,我无法在浏览器变量上调用“newPage()”方法。 我怎样才能解决这个问题? 感谢您提前抽出时间。

class Puppet {
  private page: puppeteer.Page;
  
  contructor() {
    this.initialize();
  }

  async initialize(){
    const browser = await puppeteer.launch({headless:true});
    this.page = await browser.newPage();
    await this.page.goto(this.url);
  }
}

从您的调用方法中,首先创建对象,然后调用 initialize() 函数:

class Puppet {
  private page!: puppeteer.Page;

  async initialize(){
    const browser = await puppeteer.launch({headless:true});
    this.page = await browser.newPage();
    await this.page.goto(this.url);
  }
}

// ... in some async function
const puppet = new Puppet();
await puppet.initialize();

如果你想让这个更方便一点,添加一个异步工厂函数:

class Puppet {
  private page!: puppeteer.Page;

  async #initialize(){
    const browser = await puppeteer.launch({headless:true});
    this.page = await browser.newPage();
    await this.page.goto(this.url);
  }

  static async create() {
      const puppet = new Puppet();
      await puppet.#initialize();
      return puppet;
  }
}

// ... in some async function
const puppet = await Puppet.create();

这还允许您将初始化隐藏在私有函数中。