javascript - puppeteer 事件错误处理程序不要去捕获块
问题描述
我正在使用 puppeteer(nodejs) 创建网络抓取,在网络抓取的某些特定部分,我正在监听一个事件,该事件在浏览器启动带有消息的对话框时触发。在此事件启动时,我抛出异常,但此异常使主进程退出,并且不会去 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)
}
有人知道我怎样才能得到这个错误并处理它?
解决方案
尝试将您的听众包裹在 a 中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);
});
}
推荐阅读
- javascript - 背景位置在全屏时没有动画
- r - 在 ggplot 比例函数中引用数据集变量的正确方法是什么?
- java - 异步回调 API 集成
- javascript - 如何在 fullcaender 中显示默认事件直到当前日期?
- angular7 - 在 URI 中的每个选项卡更改上提示输入密码 - Angular 7
- javascript - 如何在javascript中将任何时区转换为本地时区?
- android - 使用 adb 通过命令行授予 android VPN 权限
- c# - 将 Kubernetes 入口与两个服务和内部 Web API 路由一起使用
- flutter - 如何在android 10或更高版本中获得“总是”位置的许可?(高于 API 29)?
- python - 我应该实施哪些方法来模仿 pandas DataFrame?