我在Node.js中有以下代码,它逐行从文件中读取。我想对每一行做一些事情并将其存储在一个数组中。然后,该数组将用于同一文件中的其他函数。我遇到的问题是读取流的异步性质导致空数组。我遇到的解决方案似乎都依赖于模块。
function processLine(file) {
const fs = require('fs');
const readline = require('readline');
const input = fs.createReadStream(file);
const rl = readline.createInterface(input);
const arr = []
rl.on('line', (line) => {
// do stuff to data and store in array
})
// return array;
}
我知道能够存储块并使用input.on('end', cb)...
对整个文件进行操作。但是,我觉得这会在cb中放置太多功能。此外,由于异步,我仍然无法使用其返回值。我想我的问题是,有没有办法存储正在读取的数据并在文件中使用它?
答案 0 :(得分:0)
如果您想处理像块一样的元素 - 请查看
highWaterMark
https://nodejs.org/api/stream.html#stream_types_of_streams
你可能会被输入:
objectMode
。
还有一些接口可以在使用流时使用:
Readable
Writable
Duplex
Transform
https://nodejs.org/api/stream.html#stream_transform_transform_chunk_encoding_callback
您可以使用任何基于Promise的函数,只需使用回调在正确的时间点完成处理元素:
_transform = function(data, encoding, callback) {
this.push(data);
callback();
};
或 https://nodejs.org/api/stream.html#stream_class_stream_transform
_write(chunk, encoding, callback) {
// ...
}
然而,还有另一种解决方案 - 节点流的rxjs绑定 - 您可以在处理元素时使用它。