我正在尝试将一些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
中不起作用的回调返回。一直使用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;
}