首页 > 解决方案 > 为什么 Node 的 process.stdin.on('readable') 会触发我的回调一次?

问题描述

我有以下代码:

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

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

标签: javascriptnode.jsprocessstream

解决方案


一旦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);
});

然后,它只会在数据到达时给您打电话。


推荐阅读