1

私の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)

ストリームハンドブックのサブスタックの例はうまく機能しています。コードのコマンド ラインに何も表示されないのはなぜですか?

4

1 に答える 1

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);
}
于 2012-10-07T11:48:04.917 に答える