2012-10-07 46 views
1

在我module.js可讀流我有試圖瞭解在node.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; 
} 

,並在工作就好從stream handbookindex.js

var module = require('./module') 

module().pipe(process.stdout) 

亞組的例子。爲什麼我的代碼沒有在命令行中顯示任何內容?

回答

2

因爲你調用pipe前發出的數據,「數據」監聽器第一個「數據」事件被觸發後附

EventEmitter的調用是同步的(因爲幾乎一切非IO在node.js中)

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); 
} 
+0

你能舉個例子嗎? – zemirco