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

如何从异步函数返回结果中正确提取所需的shortcode字段数据

错误原因

  • 第一个版本报错res is not defined是因为res是.then()回调的局部变量,仅在回调函数内部可访问,写在回调外部自然无法读取到该变量。
  • 第二个版本无日志输出是两个问题共同导致的:
    1. 定义了async立即执行函数但没有加()触发调用,函数本身根本没有运行
    2. 字段取值路径写错,res.edge_owner_to_timeline_media.edges本身就是返回的媒体数组,不需要额外加.Media字段,且数组每一项需要先取.node属性才能拿到shortcode

正确代码示例

推荐用async/await写法简化逻辑,避免回调地狱,同时统一捕获错误方便排查:

client.on('ready', async () => {
  try {
    // 登录
    const data1 = await IGclient.login()
    console.log('Data1: ', data1)
    // 获取Profile
    await IGclient.getProfile()
    // 拉取对应用户数据
    const userRes = await IGclient.getUserByUsername({ username: "worldstar" })
    const mediaList = userRes.edge_owner_to_timeline_media.edges
    console.log('Media: ', mediaList)
    // 提取第一条内容的shortcode
    const firstShortcode = mediaList[0].node.shortcode
    console.log('首条内容shortcode: ', firstShortcode)
    // 此处可直接写后续的新帖对比、同步到Discord的逻辑
  } catch (err) {
    console.error('执行过程出错: ', err)
  }
})

如果需要保留原有的.then()链式写法,也可以调整为以下版本:

client.on('ready', () => {
  IGclient
  .login()
  .then((data1) => {
    console.log('Data1: ', data1)
    return IGclient.getProfile()
  })
  .then(() => {
    return IGclient.getUserByUsername({ username: "worldstar" })
  })
  .then(res => {
    const mediaList = res.edge_owner_to_timeline_media.edges
    console.log('Media: ', mediaList)
    console.log('首条内容shortcode: ', mediaList[0].node.shortcode)
    // 后续逻辑写在当前回调内即可
  })
  .catch(err => console.error('执行过程出错: ', err))
})

内容的提问来源于stack exchange,提问作者RasmonT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:09:01