木偶事件错误处理程序不要去捕获块

时间:2019-02-26 18:25:23

标签: javascript node.js web-scraping puppeteer

我正在使用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) 
  }

有人知道如何获取此错误并进行处理?

1 个答案:

答案 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);
  });
}