You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:29:28