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

使用FileReader读取音频文件为何返回[object promise]而非Data URL?

问题原因及解决方法

首先明确:FileReader的readAsDataURL是异步操作,它不会立刻返回Data URL,而是在文件读取完成后通过onload事件回调返回结果。你的代码完全搞错了它的使用逻辑,这才导致最终拿到[object promise]这类错误结果。

你的代码里的具体问题

  1. 变量逻辑混乱:你把audioReader_SE赋值成getAudioURL()的返回值,但readAsDataURL本身是无返回值的方法,所以audioReader_SE根本不是一个合法的FileReader实例,后续读取audioReader.result自然拿不到正确结果。
  2. 同步获取异步结果:你直接调用getAudioURLResult()去读取result,但此时FileReader还没完成文件读取操作,result值为空,甚至变量都没正确关联到FileReader实例。
  3. 至于图片处理看似正常,大概率是之前的代码无意中遵循了异步逻辑(比如在onload回调里处理结果),但你当前的音频代码完全没按异步流程来写。

正确的写法示例

方式1:直接使用onload事件回调

// 假设你已经获取到选中的audioFileStorage文件对象
const audioReader_SE = new FileReader();

// 监听读取完成事件
audioReader_SE.onload = function() {
  // 读取完成后,this.result才是正确的音频Data URL
  const audioSrcStorage = this.result;
  console.log(audioSrcStorage);
  // 在这里执行写入文本文件的逻辑,而不是同步去获取结果
};

// 启动异步读取操作
audioReader_SE.readAsDataURL(audioFileStorage);

方式2:用Promise封装,配合async/await使用

// 封装FileReader为Promise
function getAudioDataUrl(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => resolve(reader.result);
    reader.onerror = reject;
    reader.readAsDataURL(file);
  });
}

// 在async函数中调用
async function processAudio() {
  // 假设这里已经获取到audioFileStorage文件对象
  const audioSrcStorage = await getAudioDataUrl(audioFileStorage);
  console.log(audioSrcStorage);
  // 在此执行写入文本文件的操作
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:15:19