我正在用puppeteer(nodejs)创建一个网络刮擦,在网络刮擦的某些特定部分中,我正在听一个事件,当浏览器启动一个带有一个带有一个的事件信息。在启动此事件时,我提出了一个例外,但是此例外使主要过程退出,并且不会抓住(err)
示例:
let page = null
const login = async () => {
//Event listening
page.on('dialog', async dialog => {
throw new Error('login_error')
}
async function processWebScraping () {
try{
page = // Initialize puppeteer page
await login()
[...]
} catch(e){
// the Error doen't come here, i got an uncaughtException
console.log(e)
}
有人知道我该如何遇到此错误?
尝试将侦听器包装在Promise
中。这样做将允许调用.then()
解析它,并召集.catch()
以捕获错误。在您的示例中,它看起来像这样
const login = () => new Promise((resolve, reject) => {
page.on('dialog', dialog => {
reject(new Error('login_error'));
});
});
function processWebScraping() {
// page initialization
login().then(() => {
console.log('No error here');
}).catch(err => {
// Handle the error
console.error(err);
});
}