我正在尝试从多个流中获取一些数据,并将它们附加到特定的变量中。代码如下。
const fs = require('fs');
data = [];
chunks = {"stream1": { "start": "10", "end": "20"}, "stream2": { "start": "20", "end": "30"}};
for(let key in chunks) {
var stream = fs.createReadStream('file.txt', {start: parseInt(chunks[key].start), end: parseInt(chunks[key].end)});
stream.on('data', function(chunk) {
data.push(chunk.toString());
}
}
console.log(data);
但是,数据输出是一个空数组[]
。请有人帮助我,以获取data
变量中的数据,然后显示它,而不是在此之前。
我想到了创建一个事件,该事件在数组的长度达到特定数字时发出,但这看起来很奇怪。
答案 0 :(得分:1)
结合How to use ES8 async/await with streams?和一些“现代化”功能,您会想要这样的东西。
async function getData() {
const out = [];
const chunks = { stream1: { start: '10', end: '20' }, stream2: { start: '20', end: '30' } };
for (const key in chunks) {
for await (const chunk of fs.createReadStream('file.txt', {
start: parseInt(chunks[key].start),
end: parseInt(chunks[key].end),
})) {
out.push(chunk.toString());
}
}
return out;
}