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

如何将包含文件及对应base64格式的对象推入数组?

问题原因

你代码的问题出在异步遍历逻辑上:Array.prototype.forEach 不支持等待异步回调执行完成,你在forEach的回调里加了async/await,但forEach本身不会等待所有异步任务结束,就会直接执行后续的console.log("data", arr),此时所有getBase64的转换操作还没返回结果,数组自然是空的。


解决方法

将forEach遍历替换为map生成Promise数组,再用Promise.all等待所有异步任务执行完成,就能直接拿到完整的包含文件和对应base64的结果数组,不需要手动push元素。

修改后的handleUploadChange代码如下:

// 给函数加上async修饰,才能在内部使用await
const handleUploadChange = async (info) => {
  if (info.file.status === "error") {
    console.log("error", info.file);
  }

  if (info.file.status === "done") {
    // 用map生成每个文件异步处理的Promise数组
    const promiseArr = info.fileList.map(async (file) => {
      const fileInfo = await getBase64(file.originFileObj);
      return { base64: fileInfo, fileObj: file };
    });
    // 等待所有Promise执行完成,直接拿到最终结果数组
    const arr = await Promise.all(promiseArr);
    console.log("data", arr);
    // 后续可以直接使用arr进行状态存储、传递给父组件等操作
  }
};

额外说明

如果需要兼容单个文件base64转换失败的场景,可以把Promise.all替换为Promise.allSettled,再自行过滤出转换成功的结果即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:27:03