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