Вы правы в том, что он работает асинхронно.Вы можете напрямую вызвать функцию 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
где-то сверху.