node.js - 我应该如何使用 csv 解析器从 fs.createReadStream() 返回数据
问题描述
我有这个功能
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中解析的数据,但是当我在.on
方法中返回数据时,数据是空的。
我应该怎么做?
解决方案
我建议使用基于承诺的方法,您可以从 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();
推荐阅读
- r - 创建一个函数,该函数创建一个向量而不需要字符串的引号
- php - 无法解码 GET 参数
- swift - Xcode 11 beta 5 中止陷阱:在@Published 变量上调用接收器时出现 6 错误
- java-8 - 特定格式的本地日期时间 yyyy-MM-dd-HH.mm.ss.SSSSSS
- elasticsearch - 为什么 rsyslog 无法使用通过 TCP 转发到某个端口(例如 10514)的 json 模板解析传入的 syslog?
- bing-maps - 刷新动画切片图层而不重新加载地图控件
- visual-studio-code - VS Code 智能感知方式
- python-3.x - 键入提示 PyCharm 自身内部使用的类
- docker - 为什么我不能使用moviepy从Docker内部访问google-storage url?
- sql - 当第二个字段中的值在给定期间(第三个字段)具有特定值时,如何在查询计数中包含空字段值