代码之家  ›  专栏  ›  技术社区  ›  VELFR

如何在使用Papa解析框架将CSV文件转换为JSON时处理“未定义”错误?

  •  0
  • VELFR  · 技术社区  · 7 年前

    这是我的JS代码:

    function main(){
        let myJSON = parseCSV();
        console.log(myJSON);
        let myCSV = transformCSV(myJSON);
        console.log(myCSV);
    }
    
    function parseCSV(){
        let parsedJSON;
        let selectedFile = document.getElementById('fileIn').files[0];
        Papa.parse(selectedFile, {
            complete: function(results) {
                parsedJSON = results.data;
                console.log(results.data);
                console.log(typeof(results.data));
            }
        });
        return parsedJSON;
    }
    
    function transformCSV(JSONIn){
        let csvOut = ""; // i will do something here later
        let dCol = ""; // i will do something here later
        let dRow = ""; // i will do something here later
        for (let i = 0; i < JSONIn.length - 1; i++) {
            // i will do something here later
        }
        return csvOut;
    }
    

    这是我的测试html页面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <script src=".\transformCSV.js"></script>
        <script src=".\node_modules\papaparse\papaparse.js"></script>
        <input type="file" id="fileIn">
        <input type="button" value="click!" onclick="main()">
    </body>
    </html>
    

    当我试图阅读 myJSON ,我在Chrome控制台中收到错误消息: Uncaught TypeError: Cannot read property 'length' of undefined .为什么它没有定义?它存在于控制台中!为什么会发生这种情况,如何解决?如何使用结果 myJSON 作为一个完全正常的静态JSON?

    1 回复  |  直到 7 年前
        1
  •  1
  •   dick Verweij    7 年前

    您可以在 完成 回调函数。这可能会被称为 之后 函数parseCSV返回了未定义的parsedJSON值。你需要用回调或承诺来重写它。

    parseCSV(function (myJSON) {
      console.log(myJSON);
      let myCSV = transformCSV(myJSON);
      console.log(myCSV);
    });
    
    function parseCSV(callback){
      let parsedJSON;
      let selectedFile = document.getElementById('fileIn').files[0];
      Papa.parse(selectedFile, {
        complete: function(results) {
            parsedJSON = results.data;
            callback(parsedJSON);
    
        }
      });
    
    }