尝试在 Nodejs 中使用 fast-csv 返回 2D 数组,但没有返回任何内容



我正在尝试使用 fast-csv 库解析 csv 文件并转换每个值数字或字符串以创建 2d 数组。 但是我无法在 ReadStream 中返回数组。 你能给我关于我的代码的建议吗?

const fs = require("fs");
const csv = require("fast-csv");
async csvParse(){
let array = [];

options = {
map(value){
// convert value's column type to number or string
}
}
fs.createReadStream(csvfile)
.pipe(csv.parse(options))
.on("error", error => console.log(error))
.on("data", data => array.push(data))
.on("end", function(){
console.log(array);
return array;
})
}

输入

name,date,score,id
John,2020-01-01,1000,10

预期输出

[["name", "date", "score", "id"], ["John", "2020-01-01", 1000, 10]]

实际输出

// no output

我希望代码返回从"输入"转换的"预期输出",但它不返回任何内容。 我知道这是由于我试图从匿名函数 on(( 返回一个值,但是我不知道正确的方法。

您可以将文件流和 csv 转换的处理包装在一个承诺中,并在发出end-事件后解决承诺:

const fs = require("fs");
const csv = require("fast-csv");
function csvParse() {
const options = {
// your options here
}
let array = [];
return new Promise((resolve, reject) => {
fs.createReadStream(csvfile)
.pipe(csv.parse(options))
.on("error", error => reject(error))
.on("data", data => array.push(data))
.on("end", () => {
console.log(array);
resolve(array);
});
});
}

然后这样称呼它:

(async() => {
const result = await csvParse();
})();

最新更新