问题:我正在尝试使用 Nodejs 流来使用fast-csv模块读取一个小的 CSV 文件( 1 行) 。
当 'data' 事件被触发时,CSV 'rows' 被推送到一个数组(rows [])。当发出“end”时,数据在数据库中更新。但是,在填充 rows[] 数组之前会触发 'end' 事件。这会间歇性地发生,有时代码会按预期工作。
阅读 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);
});
});
}