for(var x = 19; x <= 29; x = x + 1) {
if(x < 29) {
if(values[x]) {
var reader = new FileReader();
var file = $(`#${keys[x]}`)[0].files[0];
reader.readAsDataURL(file);
reader.onloadend = function () {
values[x] = reader.result.slice(reader.result.indexOf(',')+1);
};
}
} else {
insertAll();
}
}
上面的代码仅返回最后一个文件并跳过所有其他文件,因为它需要时间才能完成,所以我如何确保循环不会在未完成读取文件的情况下继续
最佳答案
您可以使用递归代替循环,下面是一个示例:
function recursion(x){
if(x < 29) {
if(values[x]) {
var reader = new FileReader();
var file = $(`#${keys[x]}`)[0].files[0];
reader.readAsDataURL(file);
reader.onloadend = function () {
values[x] = reader.result.slice(reader.result.indexOf(',')+1);
recursion(++x)
};
}
} else {
insertAll();
}
}
recursion(19)
// You get here only after all the files are read.
这个想法是只有在读完当前文件后才开始读取下一个文件(recursion(...)
在 reader.onloadend
中调用> 回调)
关于javascript - 无法计算 Javascript 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51803019/