首页 > 解决方案 > 在类方法中使用 Puppeteer

问题描述

我在问我是否可以在类方法中使用 Puppeteer。我阅读了很多关于 async/await 函数的内容,但我找不到任何关于类的内容。我目前有这个:

class Tools{
  async login() {
    this.browser = ppt.launch({
      headless: true,
    });
    this.page = this.browser.newPage();
    this.page.type('#email','test');
   ...
  }

主要方法:

(async function main() {
  try {

    const tools = await new Tools();
  } catch(e) {
    console.log('Error: ' + e);
  }
})();

对此有何建议?

标签: javascriptnode.jsclasspuppeteer

解决方案


您只是在代码中调用构造函数。您还需要调用该login函数。此外,您不想将 放在await构造函数的前面,而是放在login.

代码

const tools = new Tools();
await tools.login();

关于async构造函数

请注意,您不能将构造函数调用 ( new Tools) 与await. 原因是,await等待返回的 Promise 被解决。但是构造函数不能返回 Promise,因为它们需要返回新创建的对象。

这就是为什么像 puppeteer 这样的库使用像puppeteer.launch. 除了之后调用异步函数之外,这些函数还将创建一个对象。如果你想在你的代码中做类似的事情,你可以这样做:

class Tools {
  async initialize() {
    // ...
  }
  static async create() {
    const newObject = new Tools();
    await newObject.initialize();
  }
}


const tools = await Tools.create();

推荐阅读