gpt4 book ai didi

javascript - 在 Javascript 中同步读取文件

转载 作者:IT王子 更新时间:2023-10-29 03:17:38 30 4
gpt4 key购买 nike

我想读取一个文件并使用 FileReader 对象将其转换为 base64 编码的字符串。这是我使用的代码:

    var reader = new FileReader();    reader.onloadend = function(evt) {          // file is loaded        result_base64 = evt.target.result;     };    reader.readAsDataURL(file); 

但在这种情况下,我在事件处理程序(onLoadEnd 事件)中获得转换结果。我想要一个同步方法。 “readAsDataURL”方法是否可以直接返回“result_base64”变量的值?

最佳答案

您可以使用标准 FileReaderSync ,它是 FileReader API 的一个更简单、同步、阻塞的版本,类似于您已经在使用的版本:

let reader = new FileReaderSync();
let result_base64 = reader.readAsDataURL(file);

console.log(result_base64); // aGV5IHRoZXJl...

请记住,由于显而易见的原因,这仅在工作线程中可用


如果您需要一个“读起来像”同步 API 的主线程解决方案,即按顺序,您可以将异步 FileReader 包装在一个 promise 中并使用异步函数(您可能需要转译):

async function readFileAsDataURL(file) {
let result_base64 = await new Promise((resolve) => {
let fileReader = new FileReader();
fileReader.onload = (e) => resolve(fileReader.result);
fileReader.readAsDataURL(file);
});

console.log(result_base64); // aGV5IHRoZXJl...

return result_base64;
}

然后你可以在另一个异步上下文中等待这个函数:

async function main() {
let file = new File(...)
let dataURL = await readFileAsDataURL(file)
console.log(dataURL); // aGV5IHRoZXJl...
}

...或者只是使用 promise 回调来使用它(不需要异步上下文):

readFileAsDataURL(file).then(dataURL => {
console.log(dataURL); // aGV5IHRoZXJl...
});

关于javascript - 在 Javascript 中同步读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17068610/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com