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

Node.js调用Instagram API转base64时async await无法正常运行问题

问题根因

    1. convertURLToBase64 函数的异步逻辑有误
      你当前使用的回调式request.get不支持原生await,函数内部的return data是返回给回调函数本身,不是外层的convertURLToBase64,加上你没有手动包装Promise,这个异步函数最终只会返回undefined,赋值给imageBase64当然是空值。
    1. 未等待所有异步转码任务完成就返回结果
      你用map遍历edges时传入了async函数,得到的updatedEdges本质是一个Promise数组,不是处理完成的edge对象数组,直接返回的话前端拿到的都是未执行完成的Promise,自然没有有效数据。

修复方案

第一步:修改convertURLToBase64,把回调逻辑包装成Promise,确保可以正确返回base64结果。
第二步:在返回updatedEdges前用Promise.all等待所有异步转码任务执行完成,再返回处理后的完整数组。

修复后完整代码

async function convertURLToBase64(url) {
  console.log('converting URL ' + url + ' to base64');
  // 把回调式的request包装成Promise
  return new Promise((resolve, reject) => {
    // 注意加encoding: null,否则二进制图片转字符串后再转base64会损坏
    request.get(url, { encoding: null }, (error, response, body) => {
      if (!error && response.statusCode == 200) {
        console.log('there was no error receiving image');
        const data = "data:" + response.headers["content-type"] + ";base64," + Buffer.from(body).toString('base64');
        resolve(data);
      } else {
        reject(error || new Error('图片请求失败'));
      }
    });
  })
}

async function getHashTaggedPosts(hashtag) {
  const url = "https://www.instagram.com/explore/tags/" + hashtag + "/?__a=1";
  try {
    const response = await axios.get(url, { headers: { Authorization: AuthStr } });
    const edges = response.data.graphql.hashtag.edge_hashtag_to_media.edges;
    // 先拿到所有异步处理的Promise数组
    const updatedEdgesPromises = edges.map(async (edge) => {
      edge.imageBase64 = await convertURLToBase64(edge.node.thumbnail_src);
      return edge;
    })
    // 等待所有Promise执行完成,拿到最终处理后的数组
    const updatedEdges = await Promise.all(updatedEdgesPromises);
    console.log('updatedEdges: ', updatedEdges);
    return updatedEdges;
  } catch (error) {
    console.log("error: " + error.message);
    // 错误场景可根据业务需求返回空数组或者抛出异常
    return [];
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:27:09