NodeJS async/await调用问题:传递函数参数执行报错
Puppeteer 传参报错的问题排查与修复
兄弟,我瞅了下你这段Puppeteer代码,问题其实挺明显的,咱一步步来捋:
首先先把你代码里的明显错误指出来:
- 变量名笔误:你写的
var frames2 = await newpage.frames();里的newpage根本没定义,应该是你之前创建的page变量,这会直接抛出ReferenceError: newpage is not defined的错误 - 异步函数调用遗漏await:如果
ex是异步函数,你直接调用ex(page)而不加await的话,会导致Promise未被处理,可能引发程序异常退出或者报错
接下来给你修复后的完整代码示例:
const puppeteer = require('puppeteer'); // 先确保ex函数是正确的异步函数,接收page参数 async function ex(page) { // 这里写你要对page执行的操作,比如获取frames或者其他逻辑 const frames = await page.frames(); console.log(`页面共有 ${frames.length} 个frame`); // 其他操作... } async function sayhi() { const browser = await puppeteer.launch({headless: false}); try { const page = await browser.newPage(); await page.goto('https://www.example.com/'); // 调用ex函数时必须加await,因为它是异步函数 await ex(page); // 修正笔误:newpage改成page var frames2 = await page.frames(); console.log(`再次获取到的frame数量:${frames2.length}`); // 其他业务逻辑... } catch (error) { // 别忘了捕获异常,方便排查问题 console.error('执行出错:', error); } finally { // 记得关闭浏览器,避免资源泄漏 await browser.close(); } } // 执行主函数 sayhi();
再给你补充几个注意点:
- 一定要用
try/catch包裹异步操作,这样能及时捕获并排查错误 - 异步函数之间的调用必须用
await,否则会导致代码执行顺序混乱 - 操作完成后记得关闭浏览器,避免占用系统资源
内容的提问来源于stack exchange,提问作者geeky_monster
相关产品推荐
相关产品推荐

