Node.js未处理Promise拒绝问题求助:async/await使用报错
解决async/await与Puppeteer代码中的UnhandledPromiseRejection错误
嘿,刚看到你第一次用async/await写Puppeteer代码遇到了未处理的Promise拒绝错误,咱们来快速定位并解决问题:
问题1:低级拼写错误
你代码最后一行的await broswer.close();里,broswer是拼写错误!正确的应该是browser——这个错误会直接抛出引用异常,而因为没有错误捕获逻辑,就触发了Node.js的UnhandledPromiseRejection警告。
问题2:缺少错误捕获机制
async函数里的任何异步操作(比如puppeteer.launch()、page.goto())如果失败,都会抛出异常并转化为被拒绝的Promise。如果没有用try/catch包裹这些操作,Node.js就会报出你看到的这个错误(新版本Node甚至会直接终止进程)。
修正后的完整代码
async function getPic(arg) { let browser; // 提前声明变量,确保finally块能访问到 try { browser = await puppeteer.launch(/*{headless: false}*/); const page = await browser.newPage(); await page.goto(arg); await page.setViewport({width: 1000, height: 500}); await page.screenshot({path: 'pic.png'}); } catch (error) { // 这里可以根据需求处理错误,比如打印日志、上报监控等 console.error('截图操作失败:', error); } finally { // 无论成功还是失败,都确保浏览器实例被关闭,避免资源泄漏 if (browser) { await browser.close(); } } }
额外提示
调用这个async函数的时候,也可以加上.catch()来处理可能的顶层错误:
// 示例调用 getPic('https://your-target-url.com') .catch(err => console.error('调用getPic时发生错误:', err));
这样修改后,不仅能解决你当前的未处理Promise错误,还能避免浏览器资源泄漏,同时让错误变得可追踪。
内容的提问来源于stack exchange,提问作者user1584421
相关产品推荐
相关产品推荐

