jason
jason

Reputation: 1631

When does Node Readable Stream of _read() called

I create my own readstream. But I want to know when the _read() be called? If I don't add on('data') listerner, the _read() will not be called. Why?

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');
});

Upvotes: 1

Views: 1074

Answers (1)

user4466350
user4466350

Reputation:

If I don't add on('data') listerner, the _read() will not be called. Why?

The stream is paused. Assuming you are using a recent version of node.

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

All Readable streams begin in paused mode but can be switched to flowing mode in one of the following ways:

Adding a 'data' event handler.

Calling the stream.resume() method.

Calling the stream.pipe() method to send the data to a Writable.

BTW, to create a readable, check noms or mississippi.from

Upvotes: 3

Related Questions