Browse Source

stream: only end reading on null, not undefined

The [Stream documentation for .push](http://nodejs.org/api/stream.html#stream_readable_push_chunk_encoding)
explicitly states multiple times that null is a special cased value
that indicates the end of a stream. It is confusing and undocumented
that undefined *also* ends the stream, even though in object mode
there is a distinct and important difference.

The docs for Object-Mode also explicitly mention null as the *only*
special cased value, making no mention of undefined.

Signed-off-by: Fedor Indutny <fedor@indutny.com>
archived-io.js-v0.10
Jonathan Reem 11 years ago
committed by Fedor Indutny
parent
commit
7fa4a9697d
  1. 2
      lib/_stream_readable.js
  2. 2
      test/simple/test-stream2-readable-non-empty-end.js

2
lib/_stream_readable.js

@ -139,7 +139,7 @@ function readableAddChunk(stream, state, chunk, encoding, addToFront) {
var er = chunkInvalid(state, chunk); var er = chunkInvalid(state, chunk);
if (er) { if (er) {
stream.emit('error', er); stream.emit('error', er);
} else if (util.isNullOrUndefined(chunk)) { } else if (chunk === null) {
state.reading = false; state.reading = false;
if (!state.ended) if (!state.ended)
onEofChunk(stream, state); onEofChunk(stream, state);

2
test/simple/test-stream2-readable-non-empty-end.js

@ -35,7 +35,7 @@ var n = 0;
test._read = function(size) { test._read = function(size) {
var chunk = chunks[n++]; var chunk = chunks[n++];
setTimeout(function() { setTimeout(function() {
test.push(chunk); test.push(chunk === undefined ? null : chunk);
}); });
}; };

Loading…
Cancel
Save