使用PapaParse我正在解析一个csv文件,然后我将其添加到变量dataShort和dataTotal。我能够在完整函数内部记录dataShort和dataTotal,但不能在它下面记录。我想这是因为函数异步运行。
因此,以下函数(changeData和dataReady)无法成功运行,因为它们需要完成解析Papa Parse。我该怎么做changeData();在函数parseCSV中,只有在上面的解析完成后才会运行?
function parseCSV(evt) {
var file = evt.target.files[0];
Papa.parse(file, {
header: true,
dynamicTyping: true,
complete: function (results) {
dataShort = results.data;
dataTotal = results.data;
console.log(results.data);
console.log("dataShort: " + dataShort);
console.log("dataTotal: " + dataTotal);
}
});
console.log("dataShort: " + dataShort);
console.log("dataTotal: " + dataTotal);
changeData();
}
function changeData() {
$.each(dataShort, function (index, item) {
if (item["Items in CHILDoc"].length > 20) {
item["Items in CHILDoc"] = item["Items in CHILDoc"].substring(0, 18) + "...";
}
if (item["Kwadrant onderdeel in CHILDoc"] != "Ingrijpende gebeurtenissen" && item["Waarde in CHILDoc"].length > 20) {
item["Waarde in CHILDoc"] = item["Waarde in CHILDoc"].substring(0, 15) + "...";
}
})
// console.log(dataShort);
// console.log(dataTotal);
dataReady();
}

答案 0 :(得分:0)
你说它是异步运行的。您可以直接从changeData
事件功能调用complete
函数。所以尝试这样的事情:
function parseCSV(evt) {
var file = evt.target.files[0];
Papa.parse(file, {
header: true,
dynamicTyping: true,
complete: function(results) {
dataTotal = results.data;
dataShort = results.data;
changeData(dataShort);
}
});
}
function changeData(var ds) {
$.each(ds, function(index, item) {
if (item["Items in CHILDoc"].length > 20) {
item["Items in CHILDoc"] = item["Items in CHILDoc"].substring(0, 18) + "...";
}
if (item["Kwadrant onderdeel in CHILDoc"] != "Ingrijpende gebeurtenissen" && item["Waarde in CHILDoc"].length > 20) {
item["Waarde in CHILDoc"] = item["Waarde in CHILDoc"].substring(0, 15) + "...";
}
});
dataReady();
}
在这里,我更改了changeData
函数以接受结果数据并从complete
函数调用它。 请注意,我删除了 dataShort
和dataTotal
变量,因为我在这里没有看到任何变量,但是如果您在代码中的某处使用它们,请将其还原。
dataShorts
函数后, 修改 changeData
会被修改,但dataTotal
仍会保留原始结果。我假设您在顶部的某处声明了dataShort
和dataTotal
个变量。