为什么我的JavaScript对象通过返回而转换为字符串?

时间:2019-04-14 12:15:23

标签: javascript json

我正在尝试将一些csv数据加载到JS对象中。它加载了数据,将其转换为对象,并且在我的转换函数中一切正常,但是当我尝试在函数外部访问它时,它似乎是字符串,不再是JS对象。

async function loadData() {
    let data = $.get("./p1.csv", function(csv){
        var lines = csv.split("\n");
        var result = [];
        var headers = lines[0].split(",");

        for(var i=1; i<lines.length; i++){
            var obj = {};
            var currentline = lines[i].split(",");

            for(var j=0; j<headers.length; j++){
                obj[headers[j]] = currentline[j];
            }

            result.push(obj);
        }
        console.log("1", result)
        return result; 
    });
    console.log("2", await data)
    return await data;
}

我希望这两个print语句返回相同的内容,但不会。 Chrome dev tools output

已解决

将功能更改为以下内容即可解决:

async function loadData() {
    let data = $.get("./p1.csv").then(function(csv){
        var lines = csv.split("\n");
        var result = [];
        var headers = lines[0].split(",");

        for(var i=1; i<lines.length; i++){
            var obj = {};
            var currentline = lines[i].split(",");

            for(var j=0; j<headers.length; j++){
                obj[headers[j]] = currentline[j];
            }

            result.push(obj);
        }
        console.log("1", result)
        return result; 
    });
    console.log("2", await data)
    return await data;
}

1 个答案:

答案 0 :(得分:0)

您正试图从在JavaScript中不起作用的回调中返回。一直使用async/await

您的代码中的此语句return await data等同于

let data = $.get("./p1.csv")
return await data; // <-- this returns your raw csv data as string
async function loadData() {
  let csv = await $.get("./p1.csv");
  var lines = csv.split("\n");
  var result = [];
  var headers = lines[0].split(",");

  for(var i=1; i<lines.length; i++){
    var obj = {};
    var currentline = lines[i].split(",");

    for(var j=0; j<headers.length; j++){
      obj[headers[j]] = currentline[j];
    }

    result.push(obj);
  }
  console.log("1", result)
  return result; 
}