【问题标题】:Wait for streams to completely update a variable等待流完全更新变量
【发布时间】:2020-11-29 22:28:52
【问题描述】:

我正在尝试从多个流中获取一些数据,并将它们附加到特定变量。代码如下。

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 变量中的数据然后显示它,而不是在那之前。

我想创建一个在数组长度达到特定数字时发出的事件,但它看起来很奇怪。

【问题讨论】:

标签: javascript node.js asynchronous


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2020-11-06
    • 2018-11-29
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多