UnhandledPromiseRejectionWarning при запуске Puppeteer? - PullRequest
0 голосов
/ 14 октября 2018

Почему я получаю следующие предупреждения и как от них избавиться?

Предупреждения:

(узел: 26771) UnhandledPromiseRejectionWarning:Необработанное отклонение обещания (идентификатор отклонения: 1): Ошибка: Ошибка протокола (Runtime.callFunctionOn): Цель закрыта.

(узел: 26771) [DEP0018] DeprecationWarning: Необработанное отклонение обещания не рекомендуется.В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с кодом, отличным от нуля.

Код:

const puppeteer = require("puppeteer");

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto("https://dn.se", { waitUntil: "domcontentloaded" });
    var output = page.evaluate(() => {
        return;
    });
    await browser.close();
})();

Среда:

  • macOS High Sierra
  • Узел v8.5.0
  • Кукольник: 1.9.0

1 Ответ

0 голосов
/ 14 октября 2018

Вам необходимо await page.evaluate(), так как он возвращает обещание:

var output = await page.evaluate(() => {
  return;
});

Убедитесь, что вы используете process.on('unhandledRejection') чтобы прослушать необработанные отклонения обещания и изящно закрыть браузер, если такое событие должно произойти:

process.on('unhandledRejection', (reason, p) => {
  console.error('Unhandled Rejection at: Promise', p, 'reason:', reason);
  browser.close();
});

Ваш окончательный код должен выглядеть примерно так:

'use strict';

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  process.on('unhandledRejection', (reason, p) => {
    console.error('Unhandled Rejection at: Promise', p, 'reason:', reason);
    browser.close();
  });

  await page.goto('https://dn.se', {
    waitUntil: 'domcontentloaded',
  });

  var output = await page.evaluate(() => {
    return;
  });

  await browser.close();
})();
...