typescript 类 : How to initialize variables that require multiple promises?

标签 typescript class constructor initialization

我的目标是在构造函数内初始化“page”变量。问题是我无法在构造函数内执行 make async/await promise 。 所以我的思考过程是“哦,只需在类内部创建一个方法,然后在构造函数内部调用它。”但当然,我错了。 Typescript 仍然对我大喊大叫,说页面没有被明确初始化。事实上,如果没有异步/等待,我无法在浏览器变量上调用“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();

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

关于 typescript 类 : How to initialize variables that require multiple promises?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69747696/

相关文章:

java - 如果没有构造函数,我怎样才能让这段代码发挥同样的作用?

c++ - 如何强制调用类的全局实例的析构函数和构造函数(所以 "re-init"是类实例)

Javascript:使用变量作为构造函数名称

typescript - 如何在 Typescript 中声明递归映射类型 (TS2456 : Type alias '*' circularly references itself.)

java - 字节好友 : Create implementation for an abstract class

java - 嵌套类有静态变量吗?

java - 如何在java中的方法内部使用类中的变量

javascript - 这可以重构为示例中看到的更具可组合性的样式吗?

javascript - 如何正确创建 Angular 域模型

javascript - 导航时是否可以防止破坏Angular组件?