首页 > 解决方案 > 如何在全局范围内创建 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:页面未定义。

有什么方法可以让它工作吗?

标签: javascriptasync-awaitpuppeteer

解决方案


将承诺存储在全局变量中:

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);

推荐阅读