(节点:13276)UnhandledPromiseRejectionWarning:错误:无法接受已处理的对话框

时间:2020-02-13 17:13:05

标签: javascript node.js testing puppeteer

(节点:13276)UnhandledPromiseRejectionWarning:未处理的承诺 拒绝。该错误是由抛出异步内部引起的 没有捕获块或拒绝承诺 未使用.catch()处理。终止未处理的节点进程 承诺拒绝,请使用CLI标志--unhandled-rejections=strict (请参见https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝ID:2)

大家好,我两次调用此函数后,从标题中得到了警告:

async function delete_page(page, page_id) {
  await page.goto('http://127.0.0.1:3000/page/' + page_id,
    { waitUntil: 'domcontentloaded' });

  const navPromise = page.waitForNavigation();
  page.on('dialog', async function(dialog) {
    await dialog.accept();
  });
  await page.click("#delete-page-button");
  await navPromise;
}

我在这里调用函数delete_page():

  after(async function() {
    this.timeout(0);
    await logout(page);
    await login(page, 'AdminTester', 'password');
    await delete_page(page, 'test');
    await delete_page(page, 'test2');
    await logout(page);
    await page.close();
  });

如何摆脱该警告?谢谢!

1 个答案:

答案 0 :(得分:0)

错误是说你不能做两次。

await dialog.accept();

您这样做两次,因为每次调用delete_page时都要注册一个新事件。

您可以解决在after函数内部而不是在delete_page内部进行此操作的问题。

page.on('dialog', async function(dialog) {
    await dialog.accept();
});

您还可以使用once函数,该函数只会被调用一次。但是,您需要确保每次通话都会出现一个对话框,因此注册不会超过一个。

page.once('dialog', async function(dialog) {
    await dialog.accept();
});