gpt4 book ai didi

Javascript Promises with FileReader()

转载 作者:可可西里 更新时间:2023-11-01 01:45:20 26 4
gpt4 key购买 nike

我有以下 HTML 代码:

<input type='file' multiple>

这是我的 JS 代码:

var inputFiles = document.getElementsByTagName("input")[0];
inputFiles.onchange = function(){
var fr = new FileReader();
for(var i = 0; i < inputFiles.files.length; i++){
fr.onload = function(){
console.log(i) // Prints "0, 3, 2, 1" in case of 4 chosen files
}
}
fr.readAsDataURL(inputFiles.files[i]);
}

所以我的问题是,我怎样才能让这个循环同步?那就是先等待文件完成加载,然后继续下一个文件。有人告诉我使用 JS Promises。但我无法让它工作。这是我正在尝试的:

var inputFiles = document.getElementsByTagName("input")[0];
inputFiles.onchange = function(){
for(var i = 0; i < inputFiles.files.length; i++){
var fr = new FileReader();
var test = new Promise(function(resolve, reject){
console.log(i) // Prints 0, 1, 2, 3 just as expected
resolve(fr.readAsDataURL(inputFiles.files[i]));
});
test.then(function(){
fr.onload = function(){
console.log(i); // Prints only 3
}
});
};
}

提前致谢...

最佳答案

我们修改了midos answer让它发挥以下作用:

function readFile(file){
return new Promise((resolve, reject) => {
var fr = new FileReader();
fr.onload = () => {
resolve(fr.result )
};
fr.onerror = reject;
fr.readAsText(file.blob);
});
}

关于Javascript Promises with FileReader(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34495796/

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