试图理解node.js中的可读流

试图理解node.js中的可读流,node.js,Node.js,在我的module.js中我有 var Stream = require('stream'); module.exports = function () { var stream = new Stream(); stream.readable = true; stream.emit('data', 'some stuff') stream.emit('end') return stream; } 在我的index.js var module = require('.

在我的
module.js中
我有

var Stream = require('stream');

module.exports = function () {
  var stream = new Stream();

  stream.readable = true;

  stream.emit('data', 'some stuff')
  stream.emit('end')

  return stream;
}
在我的
index.js

var module = require('./module')

module().pipe(process.stdout)

来自的substack示例运行良好。为什么我的代码没有在命令行中显示任何内容?

因为您在调用
管道之前发送数据,并且在触发第一个“data”事件之后附加了“data”侦听器

EventEmitter的调用是同步的(与node.js中几乎所有其他非IO调用一样)

有点简化的版本

stream.emit('data', 'some stuff')
stream.pipe(process.stdout)
如果没有EventEmitter,则可以将其重写为

stream.listeners = [];
// 'emit' call
var ondata = stream.listeners.data;
if (ondata) {
   // only one listener case in the example
   ondata('some stuff');
}
// 'pipe' call
stream.listeners.data = function(buff) {
    process.write(buff);
}