在我的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工作得很好。为什么我的代码在命令行中没有显示任何内容?
最佳答案
因为您在调用 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);
}
关于node.js - 尝试理解 Node.js 中的可读流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768053/