在Nodejs中读取stdin同步

时间:2014-12-31 16:40:31

标签: node.js stdin

好的,现在我明白这是“异步”但是我可以假设cat从一个管道传递的文件的输入将与它被读入的顺序相同(或者它更像是一个未解锁的混乱我可以按照正确的顺序交叉我的数字吗?

或者这是否有序,因为管道是同步的,读取按顺序缓冲

我在这里有意义吗?文件1是否有可能 - >无趣将失灵?

var input = ''

process.stdin.setEncoding('utf8')
process.stdin.on('data',function(chunk){
  input+=chunk
})

process.stdin.on('end',function(){
  run()
})


function run(){
  console.log(input)
}

1 个答案:

答案 0 :(得分:0)

这是使用async / await读取stdin数据的“同步”方式:

const data = [
     [{ Name: 'Name 1', Block: [{Id: "1"}, {Id: "2"}] }],
     [{ Name: 'Name 2', Block: [{Id: "3"}, {Id: "4"}] }],
]


const idList = data.map(blockData => {
   return blockData[0].Block;
});

console.log(idList)

请注意,如果没有标准输入数据,则必须设置超时,否则它将挂起。

用法示例:

async function readStdinSync() {
  return new Promise(resolve => {
    let data = ''
    process.stdin.setEncoding('utf8')
    process.stdin.resume()
    const t = setTimeout(() => {
      process.stdin.pause()
      resolve(data)
    }, 1e3)
    process.stdin.on('readable', () => {
      let chunk
      while ((chunk = process.stdin.read())) {
        data += chunk
      }
    }).on('end', () => {
      clearTimeout(t)
      resolve(data)
    })
  })
}

async function main() {
  const input = await readStdinSync()
  process.stdout.write(input) // "hello world"
  process.exit(0)
}

main()