JavaScript reader.readAsDataURL() 返回“未定义”

Posted

技术标签:

【中文标题】JavaScript reader.readAsDataURL() 返回“未定义”【英文标题】:JavaScript reader.readAsDataURL() returns "undefined" 【发布时间】:2021-10-18 09:21:46 【问题描述】:

在过去的几个小时里,我一直在尝试找到一种使用 javascript 对二进制数据进行 Base64 编码的方法,结果发现 btoa() 仅适用于字符串,所以我想出了以下代码,其中 blob 是我需要编码的文件:

function base64Encode(blob) 
    var reader = new FileReader();
    reader.readAsDataURL(blob)
    reader.onloadend = function() 
        console.log(reader.result);
    ;
;

问题是,base64Encode(blob) 总是返回 undefined,有人知道解决办法吗?

【问题讨论】:

试着把你的函数放在onload,而不是onloadend。另外,你的 blob 有没有可能是格式错误的? 你的函数base64Encode没有返回任何东西,所以隐式返回undefined 1.任何没有return 语句的函数“返回未定义”。 2. readAsDataUrl 是异步的。 read more 【参考方案1】:

你没有从你的函数中返回任何东西,你可以使用 Promise 和 async/await。作为示例,请参见下面的代码,它可能会对您有所帮助。

const convertBlobToBase64 = async (blob) => 
  return await blobToBase64(blob);


const blobToBase64 = blob => new Promise((resolve, reject) => 
  const reader = new FileReader();
  reader.readAsDataURL(blob);
  reader.onload = () => resolve(reader.result);
  reader.onerror = error => reject(error);
);

来电者:

console.log(await convertBlobToBase64(someFileData));

【讨论】:

以上是关于JavaScript reader.readAsDataURL() 返回“未定义”的主要内容,如果未能解决你的问题,请参考以下文章

javascript JavaScript isset()等效: - JavaScript

JavaScript 使用JavaScript更改CSS(JavaScript)

JavaScript之基础-1 JavaScript(概述基础语法)

前端基础-JavaScript的基本概述和语法

JavaScript

JavaScript