尝试了解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); }