javascript - 如何在全局范围内创建 async/await
问题描述
我想使用一个全局变量,它有一个等待,像这样:
(async () => {
const browser = await puppeteer.launch({headless: false})
const page = await browser.newPage();
})()
然后在我的所有功能上使用它:
async function login() {
await page.goto(urls.login);
await page.type('#username', user);
await page.type('#password', pw);
page.click('[type="submit"]');
await page.waitForNavigation();
}
运行它我得到这个错误:
ReferenceError:页面未定义。
有什么方法可以让它工作吗?
解决方案
将承诺存储在全局变量中:
const pagePromise = (async () => {
const browser = await puppeteer.launch({headless: false})
return browser.newPage();
})();
然后你可以稍后使用它
async function login(page) {
await page.goto(urls.login);
await page.type('#username', user);
await page.type('#password', pw);
page.click('[type="submit"]');
await page.waitForNavigation();
}
pagePromise.then(login).catch(console.error);
或者
async function login() {
const page = await pagePromise;
await page.goto(urls.login);
await page.type('#username', user);
await page.type('#password', pw);
page.click('[type="submit"]');
await page.waitForNavigation();
}
login().catch(console.error);
推荐阅读
- python - 模型中的“更新”会导致覆盖
- c - 冒泡排序与 C 中的结构
- php - Substr 数组中的所有值
- c# - 视图模型更新时视图不更新
- rest - 如何使用 HTTP API 将数据上传到 IBM IoT Platform 和 Cloudant 数据库?
- python - Django 测试客户端中的 UNIQUE 约束失败
- mysql - 引导日期选择器自定义格式保存到 DATE MySQL
- html - chrome和firefox浏览器输入中占位符大小的差异
- c# - C#。iText7. 在 pdf 中查找表格
- javascript - 在重新加载完整图表之前,highcharts 是否有回调函数(这不应该包括图例禁用)?