ВЫПУСК: Я пытаюсь использовать Nodejs потоки для чтения небольшого файла CSV ( 1 строка ) с помощью модуля fast-csv .
CSV-строки «помещаются» в массив (row []), когда генерируется событие «data». Когда выдается «end», данные обновляются в БД. Однако, событие 'end' запускается до того, как можно заполнить массив row []. Это происходит периодически, и иногда код работает как задумано.
Мое предположение после прочтения Nodejs Документы о том, что это связано с небольшим размером файла CSV. Данные считываются в «текущем» режиме, и как только читается первая строка, запускается даже «конец», что, по-видимому, происходит до того, как запись помещается в требуемый массив.
Пробовал использовать режим «пауза», но он не работал.
Я новичок с Nodejs и не могу понять, как заставить эту функцию работать. Буду признателен за любую помощь или руководство.
КОД:
function updateToDb(filename, tempLocation) {
const rows = [];
const readStream = fs.createReadStream(tempLocation + '\\' + filename).pipe(csv.parse());
return new Promise((resolve, reject) => {
readStream.on('data', row => {
console.log('Reading');
rows.push(row);
})
.on('end', () => {
console.log('Completed');
let query = `UPDATE ${tables.earnings} SET result_date = CASE `;
rows.forEach(element => {
query += `WHEN isin = '${element[0]}' AND announcement_date = '${element[1]}' THEN '${element[2]}' ELSE result_date`;
});
query += ' END';
connection.query(query, (error, results) => {
if (error)
reject(error);
else
resolve(results.changedRows);
});
})
.on('error', error => {
reject(error);
});
});
}