推送后数组索引 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
}