Проблемы чтения небольшого CSV-файла в Node - PullRequest
0 голосов
/ 26 февраля 2020

ВЫПУСК: Я пытаюсь использовать 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);
            });
    });
}
...