爸爸的解析乱了

时间:2018-05-25 12:58:28

标签: javascript jquery papaparse

使用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();
}




1 个答案:

答案 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函数调用它。 请注意,我删除了dataShortdataTotal变量,因为我在这里没有看到任何变量,但是如果您在代码中的某处使用它们,请将其还原。

调用dataShorts函数后,

修改 changeData会被修改,但dataTotal仍会保留原始结果。我假设您在顶部的某处声明了dataShortdataTotal个变量。