Node.js 如何使用csv解析器从fs.createReadStream()返回数据
我有这个功能Node.js 如何使用csv解析器从fs.createReadStream()返回数据,node.js,Node.js,我有这个功能 function getData(file, type) { let data = []; fs.createReadStream(file) .pipe(csv({headers: false, separator: ';',})) .on('data', (row) => { let item = { date: row[0], valu
function getData(file, type) {
let data = [];
fs.createReadStream(file)
.pipe(csv({headers: false, separator: ';',}))
.on('data', (row) => {
let item = {
date: row[0],
value: row[1]
};
let item2 = {
date: moment(row[0], "DD-MM-YYYY HH:mm").add(30, "minutes").format("DD/MM/YYYY HH:mm"),
value: row[2]
};
data.push(item);
data.push(item2);
})
.on('end', () => {
return data;
});
}
我想返回在csv中解析的数据,但是当我在方法中返回数据时,数据是空的
我应该怎么做?我建议使用基于承诺的方法,您可以从getData函数返回承诺,然后根据需要解决或拒绝
这使得调用函数的内容更加清晰
例如:
function getData(file, type) {
let data = [];
return new Promise((resolve, reject) => {
fs.createReadStream(file)
.on('error', error => {
reject(error);
})
.pipe(csv({headers: false, separator: ';',}))
.on('data', (row) => {
let item = {
date: row[0],
value: row[1]
};
let item2 = {
date: moment(row[0], "DD-MM-YYYY HH:mm").add(30, "minutes").format("DD/MM/YYYY HH:mm"),
value: row[2]
};
data.push(item);
data.push(item2);
})
.on('end', () => {
resolve(data);
});
});
}
async function testGetData() {
try {
const data = await getData("test.csv", {});
console.log("testGetData: parsed CSV data:", data);
} catch (error) {
console.error("testGetData: An error occurred: ", error.message);
}
}
testGetData();
你应该听.on('error',(err)=>{
看看你是否没有问题。同时把.on('data',(row)=>{
函数转换成try/catch
我现在做的不是返回数据,而是使用全局变量,所以我知道现在没有错误。所以,它不能解决问题,但无论如何,我会检查它,它是一个重要变量,你说得对!