我正在尝试使用 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();
})();