0

问题:我正在尝试使用 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);
            });
    });
}
4

0 回答 0