在 Puppeteer 教程的开头,它说要这样做:
const puppeteer = require('puppeteer');
(async () =>
{
await page.goto('https://example.com');
const browser = await puppeteer.launch();
const page = await browser.newPage();
await browser.close();
})();
这对我来说似乎很奇怪,因为整个事情都包含在一个异步函数中。如果我想等到这完成后再继续怎么办?
编辑 - 为什么这对我来说很奇怪:
如果我所有的代码都依赖于浏览器怎么办,也就是说,除了这个异步函数之外我无能为力。那么我的代码将如下所示:
//nothing up here
(async () =>
{
//EVERYTHING is in here
})();
//nothing down here
这看起来很奇怪,因为我还不如同步地做所有事情,而不是将我的整个程序包装在一个异步函数中。
最佳答案
async
函数的原因
出于向后兼容的原因,您需要将包含 await
指令的代码包装在 async
函数中。在 ES7 之前,您可以使用单词 await
作为变量或函数名称,这意味着这是有效代码:
var await = 123;
console.log(await);
为了不与现有代码混淆,await
关键字仅在 async
函数内部起作用,这意味着编写类似 await page.goto(..)
你必须把它放在一个异步函数中,就像你正在使用的那样。
等待代码完成
要等到代码完成,您可以在最后一个 await
语句之后继续,如下所示:
(async () => {
// ...
await browser.close();
// continue with more code
})();
关于javascript - Puppeteer 同步定义浏览器和页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57642306/