我正在尝试将一些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;
}
答案 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;
}