0

我想在 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,第一个文件的数据在数据库中的保存工作顺利,但由于第一次解析没有结束,所以无法到达第二个文件。任何想法 ?

4

0 回答 0