什么时候调用_read()的Node Readable Stream?

我创build自己的阅读stream。 但是我想知道什么时候调用_read(),如果我不添加on('data') listerner,_read()不会被调用,为什么呢?

 var data = [{"id":0,"name":"object 0","value":3}], Readable = require('stream').Readable, util = require('util'); var ReadStream = function() { Readable.call(this, {objectMode: true}); this.data = data; this.curIndex = 0; }; util.inherits(ReadStream, Readable); ReadStream.prototype._read = function() { if (this.curIndex === this.data.length) return this.push(null); var data = this.data[this.curIndex++]; //console.log('read: ' + JSON.stringify(data)); this.push(data); }; var stream = new ReadStream(); stream.on('data', function(record) { console.log('received: ' + JSON.stringify(record)); }); stream.on('end', function() { console.log('done111'); }); 

如果我不添加('data')listerner,_read()将不会被调用,为什么?

该stream已暂停。 假设您正在使用最新版本的节点。

https://nodejs.org/api/stream.html#stream_two_modes

所有可读stream都以暂停模式开始,但可以通过以下方式之一切换到stream动模式:

添加一个“数据”事件处理程序。

调用stream.resume()方法。

调用stream.pipe()方法将数据发送到一个Writable。

顺便说一句,创build一个可读,检查noms或mississippi.from