1

在我的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)

流手册中的子堆栈示例运行良好。为什么我的代码在命令行中没有显示任何内容?

4

1 回答 1

2

因为您在调用之前发出数据pipe,并且在触发第一个 '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);
}
于 2012-10-07T11:48:04.917 回答