尝试了解node.js中的可读stream

在我的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手册的 substack的例子工作得很好。 为什么我的代码在命令行中没有显示任何内容?

因为在调用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); }