推送后数组索引 returns 未定义 - Papa Parse
Array index returns undefined after push - Papa Parse
我使用 Papa Parse 解析了一个 .csv 文件,并将结果推送到一个名为 parsed_data
的空数组中。我能够使用 console.log(parsed_data)
,并查看生成的数组。但是,当我尝试索引数据时,例如 console.log(parsed_data[0])
,结果是未定义的。不确定这里出了什么问题。
示例代码:
let parsed_data = [];
const data_url = "acdata.csv";
async function getData() {
const response = await fetch(data_url);
const blob = await response.blob();
const data = Papa.parse(blob, {
complete: function(results) {
//console.log("Finished:", results.data);
parsed_data.push(results.data);
}
});
};
console.log(parsed_data);
getData();
由于 Papa parse complete
回调是异步调用的,您需要等待它完成 - 但是,papa parse 似乎不使用 Promises,因此,您可以 "promisify"像这样的解析函数
const papaParsePromise = blob => new Promise(resolve => Papa.parse(blob, { complete: resolve }));
如果您不理解 =>
表示法,查看该函数的另一种方式是
function papaParsePromise(blob) {
return new Promise(function(resolve) {
Papa.parse(blob, {
complete: function(data) {
resolve(data);
}
);
});
}
returns 一个解析为传递给完整回调的数据的承诺
您的代码还需要等待 getData
返回的承诺,然后才能使用该数据中的任何内容。除非您的代码在另一个 async
函数中,否则您需要使用 promise .then
方法,如下所示
const data_url = "acdata.csv";
async function getData() {
// create a function that returns a Promise that resolves when papa parse complete is called
const papaParsePromise = blob => new Promise(resolve => Papa.parse(blob, { complete: resolve }));
const response = await fetch(data_url);
const blob = await response.blob();
const data = await papaParsePromise(blob);
return data;
};
getData()
.then(parse_data => {
console.log(parsed_data);
console.log(parsed_data[0]);
// i.e. do what you need with parsed_data here
});
但是,如果您在 async
函数内调用 getData
- 连同上面对 getData
的更改,您可以简单地使用 await getData()
等待值 - 即
async function someFunction() {
const parsed_data = await getData();
// do what you need with parsed_data here
}
我使用 Papa Parse 解析了一个 .csv 文件,并将结果推送到一个名为 parsed_data
的空数组中。我能够使用 console.log(parsed_data)
,并查看生成的数组。但是,当我尝试索引数据时,例如 console.log(parsed_data[0])
,结果是未定义的。不确定这里出了什么问题。
示例代码:
let parsed_data = [];
const data_url = "acdata.csv";
async function getData() {
const response = await fetch(data_url);
const blob = await response.blob();
const data = Papa.parse(blob, {
complete: function(results) {
//console.log("Finished:", results.data);
parsed_data.push(results.data);
}
});
};
console.log(parsed_data);
getData();
由于 Papa parse complete
回调是异步调用的,您需要等待它完成 - 但是,papa parse 似乎不使用 Promises,因此,您可以 "promisify"像这样的解析函数
const papaParsePromise = blob => new Promise(resolve => Papa.parse(blob, { complete: resolve }));
如果您不理解 =>
表示法,查看该函数的另一种方式是
function papaParsePromise(blob) {
return new Promise(function(resolve) {
Papa.parse(blob, {
complete: function(data) {
resolve(data);
}
);
});
}
returns 一个解析为传递给完整回调的数据的承诺
您的代码还需要等待 getData
返回的承诺,然后才能使用该数据中的任何内容。除非您的代码在另一个 async
函数中,否则您需要使用 promise .then
方法,如下所示
const data_url = "acdata.csv";
async function getData() {
// create a function that returns a Promise that resolves when papa parse complete is called
const papaParsePromise = blob => new Promise(resolve => Papa.parse(blob, { complete: resolve }));
const response = await fetch(data_url);
const blob = await response.blob();
const data = await papaParsePromise(blob);
return data;
};
getData()
.then(parse_data => {
console.log(parsed_data);
console.log(parsed_data[0]);
// i.e. do what you need with parsed_data here
});
但是,如果您在 async
函数内调用 getData
- 连同上面对 getData
的更改,您可以简单地使用 await getData()
等待值 - 即
async function someFunction() {
const parsed_data = await getData();
// do what you need with parsed_data here
}