我想在 for 循环中解析多个 csv 文件。
我将文件的解析称为:
const rd = process.env.PWD;
const getfilePath = (i) =>
`${rd}/data_PART_${i}.csv`;
for (let i = 1; i < 43; i++) {
const filePath = getfilePath(i);
console.log("start ", filePath);
await extractData(filePath);
console.log("finished ", filePath);
}
我的 extractData 函数如下:
export const extractData = async (filePath: string): void => {
let wasSaved = 0;
return new Promise(function (resolve, reject) {
fs.createReadStream(filePath)
.pipe(csv({ separator: ";" }))
.on(
"data",
Meteor.bindEnvironment((row) => {
const toSave = {
...row,
_id: Random.id(),
};
saveData(toSave);
wasSaved++
console.log(wasSaved)
})
)
.on("end", () => {
console.log("CSV file successfully processed");
console.log(filePath);
})
.on("error", reject);
});
};
解析开始良好,我可以看到第一个文件的 176000 行已保存在控制台日志中。但是,在行过程结束时,我永远不会看到 on('end' 被触发,因此它永远不会进入下一个文件。
文件大约 50MB,第一个文件的数据在数据库中的保存工作顺利,但由于第一次解析没有结束,所以无法到达第二个文件。任何想法 ?