如何从异步函数返回结果中正确提取所需的shortcode字段数据
错误原因
- 第一个版本报错
res is not defined是因为res是.then()回调的局部变量,仅在回调函数内部可访问,写在回调外部自然无法读取到该变量。 - 第二个版本无日志输出是两个问题共同导致的:
- 定义了async立即执行函数但没有加
()触发调用,函数本身根本没有运行 - 字段取值路径写错,
res.edge_owner_to_timeline_media.edges本身就是返回的媒体数组,不需要额外加.Media字段,且数组每一项需要先取.node属性才能拿到shortcode
- 定义了async立即执行函数但没有加
正确代码示例
推荐用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
相关产品推荐
相关产品推荐

