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)