我使用papa parse读取一个大的.csv并将其内容复制到我的代码中的数组中。如果我执行下面的代码,控制台首先显示第二个日志,作为空数组。我会期望通过调用函数parseMe来填充.csv的内容,然后再次记录它?
function parseMe(url, callBack){
Papa.parse(url, {
complete: function(results) {
callBack(results.data[0]);
}
});
}
function doStuff(data){
newArray=data;
console.log(newArray); //log no. 1
}
var newArray=[];
parseMe(document.getElementById("file").files[0], doStuff);
console.log(newArray); //log no. 2
答案 0 :(得分:1)
“log no.2”显示空结果数组的原因是当该行代码运行时尚未解析该数组。如果您在日志输出中添加一些标识文本,您将看到如下内容:
(Log no.2) After parse call but before complete fired, newArray: []
(Log no.1) In OnComplete callback, Array is: [ populated_array ]
即,执行顺序如下:
工作笔:http://codepen.io/sensei/pen/mPPKBP/
这里的关键概念是异步执行;我建议您阅读JavaScript承诺(blogpost,MDN reference),以获得一个现代化的API,帮助您了解此关键计算概念的Web应用程序实现。