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

时间:2012-10-07 10:38:13

标签: 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')

module().pipe(process.stdout)
来自stream handbook

substack示例工作得很好。为什么我的代码在命令行中没有显示任何内容?

1 个答案:

答案 0 :(得分:2)

因为您在调用pipe之前发出数据,并且在第一次“数据”事件被触发后附加了“数据”侦听器

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