Javascript/Node.js中的嵌套类实例
我使用的是操纵chrome的NodeJS模块的puppeteer。Javascript/Node.js中的嵌套类实例
它有2个功能来启动一个新的浏览器和一个新的页面。
const的浏览器=等待puppeteer.launch()和browser.newPage()
我想创建一个类来创建一个新的一页,新的浏览器。
这是我这样做的旧方式,没有类,它的工作原理,但它不允许我创建新的页面。这就是为什么我想转移到使用类。
let chrome = {} chrome.init = async (options) => {
chrome.browser = await puppeteer.launch(options)
chrome.page = await chrome.browser.newPage()
}
chrome.pageContains = async (string) => {
return await chrome.page.evaluate((string) => {
const regex = new RegExp(string, 'i')
return regex.test(document.querySelector('body').innerText)
}, string)
}
module.exports = chrome
这是我的新代码,但我不知道我在做什么,这显然是错误的,并没有任何意义。
chrome.init = async (options) => { return {browser: await new Chrome(options)
}
class Chrome {
async constructor(options) {
this.browser = await puppeteer.launch(options)
}
newPage() {
return await this.browser.newPage()
}
}
class Page {
async constructor() {
this.page = await chrome.browser.newPage()
}
}
那么,如何让我的旧代码使用类而不是对象工作?
回答:
你有一些错字和构造函数不是异步的。
除此之外,您只需将正确的浏览器功能传递给Page类。您可以使用页面扩展Chrome并使用super
,或将它们保持分开,但该页面在某个时刻必须可以访问浏览器。
首先,我们将启动浏览器并将其返回。等待会照顾承诺。
const puppeteer = require('puppeteer'); class Chrome {
constructor(options) {
this.browser = puppeteer.launch(options);
return this.browser;
}
}
然后我们将它传递给页面构造函数并从那里使用它。
class Page { constructor(browser) {
this.browser = browser;
this.page = browser.newPage();
return this.page;
}
async pageContains(string){
return await this.browser.page.evaluate((string) => {
const regex = new RegExp(string, 'i')
return regex.test(document.querySelector('body').innerText)
}, string)
}
}
然后,我们称它们并使它们可用。并根据需要返回浏览器和页面对象。
const getChrome = async (options) => { const browser = await new Chrome(options);
const page = await new Page(browser);
return { browser, page }
}
现在我们可以使用它们。
(async()=>{ const page = (await getChrome({headless: false})).page;
await page.goto('http://example.com');
})()
我敢肯定它可以进行重构和我写在这里是不是最好的做法,但是这将让你去。
以上是 Javascript/Node.js中的嵌套类实例 的全部内容, 来源链接: utcz.com/qa/263576.html