客观的
使用csv-write-stream和 fs 流将一个非常大的数组写入文件。
背景
我有一个小型应用程序,可将大量数据(数千个条目)写入 CSV 文件。为了实现这一点,我使用了前面提到的库,它只不过是 fs 流的掩码(方便)。但是,应用程序在运行时崩溃,我不知道为什么。
错误
文件被创建并且流开始写入它,但是在执行过程中我总是遇到同样的错误:
events.js:141
throw er; // Unhandled 'error' event
^
Error: write after end
at writeAfterEnd (_stream_writable.js:166:12)
at WriteStream.Writable.write (_stream_writable.js:211:5)
at ondata (_stream_readable.js:536:20)
at emitOne (events.js:77:13)
at emit (events.js:169:7)
at Readable.read (_stream_readable.js:368:10)
at flow (_stream_readable.js:751:26)
at WriteStream.<anonymous> (_stream_readable.js:609:7)
at emitNone (events.js:67:13)
at WriteStream.emit (events.js:166:7)
代码
我知道这个错误与这段代码有关:
let writer = csvWriter({
headers: ['country', 'postalCode']
});
let fsStream = fs.createWriteStream('output.csv');
writer.pipe(fsStream);
//very big array !
currCountryCodes = [{country: 'A', postalCode: 0}, {country: 'B', postalCode: 1 }];
for (let j = 0; j < currCountryCodes.length; j++) {
writer.write(currCountryCodes[j]);
}
writer.end(function() {
fsStream.end(function() {
console.log('=== CSV written successfully, stopping application ===');
process.exit();
});
});
最具体的执行:
fsStream.end(function() {
console.log('=== CSV written successfully, stopping application ===');
process.exit();
});
但我不明白为什么会这样。不知何故,它只发生在我正在编写的数组有数千行时,如果我只有十几行,它运行得很好。
问题
通过阅读错误,我得到的印象是在关闭流后我仍在写入文件,但这不可能发生,因为这些函数仅在所有内容都刷新到文件时运行(对吗?)
- 我的代码有什么问题?