2012-10-07 3 views
1

Dans mon module.js jeEssayer de comprendre les flux lisibles dans 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; 
} 

et dans mon index.js

var module = require('./module') 

module().pipe(process.stdout) 

exemple de substack du stream handbook fonctionne très bien. Pourquoi mon code ne montre rien dans la ligne de commande?

Répondre

2

Parce que vous émettez données avant d'appeler pipe, et celui qui écoute « données » apposée après le premier événement « données » se déclenche

appels de EventEmitter sont synchrones (comme presque tout le reste non-IO dans Node.js)

Un peu version simplifiée de

stream.emit('data', 'some stuff') 
stream.pipe(process.stdout) 

sans EventEmitter pourrait être réécrite comme

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

pourriez-vous donner un exemple? – zemirco