【发布时间】:2019-12-03 19:05:06
【问题描述】:
我需要上传多个 json 文件并将它们的内容存储在一个数组中。我的目标是以某种方式将它们合并在一起。我试过这样做:
var results = new Array(); //global variable
document.getElementById('uploadId').onclick = function () {
var files = document.getElementById('selectFiles').files;
for (var i = 0; i < files.length; i++) {
var fr = new FileReader();
fr.onload = function (e) {
console.log(e);
var result = JSON.parse(e.target.result);
results.push(result);
}
fr.readAsText(files.item(i));
}
process();
};
function process(){
console.log(results); // displays everything as expected
console.log(results.length); // returns 0 ?!
console.log(results[0]) // return undefined ?!
}
然后在将results 数组记录到控制台时,一切都按预期显示。但是当我尝试遍历数组时,所有单个对象都是undefined。 results.length 也返回 0。
我猜可能存在与异步性有关的问题。知道如何解决这个问题吗?
【问题讨论】:
-
当它被记录时,
results旁边是否恰好有一个蓝色的“i”符号? -
@matthew-e-brown 是的,确实如此
-
那个小小的 '
i' 是浏览器的控制台,它告诉您,当您在控制台中查看该数据时,该数据已被评估,而当它的行时 not达到了。这意味着(可能)在process()运行时它是空的,直到之后您检查它才真正被填充。 -
@matthew-e-brown 所以在调用 process() 之前我需要稍等片刻,直到添加到数组完成?
-
您需要在所有
fr.onload()完成后执行process()。
标签: javascript json filereader onload