我正在使用puppeteer(nodejs)创建一个Web抓取,在Web抓取的某些特定部分中,我正在侦听一个事件,该事件在浏览器启动带有消息的对话框时触发。关于何时启动此事件的信息,我引发了一个异常,但是该异常使主进程退出,并且不会转到catch(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)
}
有人知道如何获取此错误并进行处理?
答案 0 :(得分:3)
尝试将您的侦听器包装在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);
});
}