pro*_*ngo 6 node.js ecmascript-6 es6-promise puppeteer
我使用Puppeteer库打开URL并处理所有请求的响应。有时在事件监听器中,page.on('response')
我需要抛出一个错误,如以下示例所示。但是我无法以任何方式捕获这些异常,我总是收到unhandled promise rejection
错误。如何处理这些异常?我不想使用process.on('unhandledRejection')
它,因为它根本无法解决我的问题。
const puppeteer = require('puppeteer');
(async () => {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.on('response', (request) => {
throw 'response error';
});
await page.goto('http://google.com/');
browser.close();
} catch (e) {}
})();
Run Code Online (Sandbox Code Playgroud)
尽管处理程序的函数page.on
位于try..catch
块内部,但该函数是异步执行的,因此该函数内部引发的任何错误都不会被外部try..catch
块捕获。
您必须try..catch
在函数内创建另一个块。
例子
const puppeteer = require('puppeteer');
function handleError(err) {
// ...
}
(async () => {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.on('response', (request) => {
try { // inner try catch block to catch errors inside this function
// ...
throw 'response error';
} catch (err) {
// Handle the error here, or pass it to another function:
handleError(err);
}
});
await page.goto('http://google.com/');
browser.close();
} catch (e) {}
})();
Run Code Online (Sandbox Code Playgroud)
小智 -3
为避免该错误,您所需要做的就是捕获 async 函数的结果(即 Promise),并以某种方式处理它,即使只是通过管道传输它console.error
。
const puppeteer = require('puppeteer');
(async () => {
try {
const browser = await puppeteer.launch();
const page = await browser.newPage();
page.on('response', (request) => {
throw 'response error';
});
await page.goto('http://google.com/');
browser.close();
} catch (e) {}
})().catch(console.error);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1272 次 |
最近记录: |