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

问题描述 投票:0回答:1

我正在尝试将一些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;
}
javascript json
1个回答
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; 
}
© www.soinside.com 2019 - 2024. All rights reserved.