#csv #parsing #stream #fs #csv-parser
Вопрос:
Я хочу проанализировать несколько csv-файлов в цикле for.
Я называю синтаксический анализ файлов как таковой:
const rd = process.env.PWD; const getfilePath = (i) =gt; `${rd}/data_PART_${i}.csv`; for (let i = 1; i lt; 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 =gt; { let wasSaved = 0; return new Promise(function (resolve, reject) { fs.createReadStream(filePath) .pipe(csv({ separator: ";" })) .on( "data", Meteor.bindEnvironment((row) =gt; { const toSave = { ...row, _id: Random.id(), }; saveData(toSave); wasSaved console.log(wasSaved) }) ) .on("end", () =gt; { console.log("CSV file successfully processed"); console.log(filePath); }) .on("error", reject); }); };
Анализ начинается хорошо, и я вижу, что 176000 строк первого файла были сохранены в журнале консоли. Однако в конце процесса строки я никогда не увижу, как срабатывает кнопка on («конец», и поэтому она никогда не переходит к следующему файлу.
Размер файла составляет около 50 МБ, и сохранение данных в БД для первого файла работает гладко, но не может добраться до второго файла, так как нет конца первому анализу. Есть идеи ?