为什么Node的process.stdin.on('可读')触发我的回调一次?

问题描述 投票:0回答:1

我有以下代码:

process.stdin.on('readable', () => {
  const input = process.stdin.read();
  console.log(input);
});

在本教程中,回调似乎在循环中触发,但是当我尝试时,它只会被调用一次,然后退出。为什么会这样呢?我的节点版本为13.12.0

javascript node.js process stream
1个回答
0
投票

一旦触发readable事件,它将不会再次触发,直到流到达末尾或直到您调用.read()并返回null(没有更多数据可读取)为止。获得null后,当有更多数据时它将再次触发。

这就是文档中的示例代码执行此操作的原因:

const readable = getReadableStreamSomehow();
readable.on('readable', function() {
  // There is some data to read now.
  let data;

  while (data = this.read()) {
    console.log(data);
  }
});

通常,这是使用流的更困难的方法。如果您在这样的流动模式下使用它们:

process.stdin.on('data', (input) => {
  console.log(input);
});

然后,只要有数据到达,它就会打电话给您。

© www.soinside.com 2019 - 2024. All rights reserved.