javascript - Puppeteer 同步定义浏览器和页面

标签 javascript node.js asynchronous async-await puppeteer

在 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/

相关文章:

javascript - 将正则表达式传递到方法 : 时遇到问题

javascript - 为什么 b ['x' ] || 0 当 x || 时求值0 没有...并且两者都是未定义的?

c# - C#异步接收会导致系统范围内的网络崩溃!

javascript - 如何在 JavaScript 中使用异步循环?

javascript - 将值从多个对象推送到数组

javascript - 如何固定文本框在屏幕上的位置

javascript - Node.js 高虚拟内存使用率

javascript - 如何测试或排除故障? Node.js 上的 Ionic 框架(与 Angular.js)

c++ - 如何将异步计时器添加到 boost UDP 服务器?

javascript setattribute 函数出现问题