stream: readable continues to read when push('')
PR-URL: https://github.com/nodejs/node/pull/18211 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
parent
baf8495078
commit
faeee11c1f
@ -250,6 +250,7 @@ function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
|
|||||||
}
|
}
|
||||||
} else if (!addToFront) {
|
} else if (!addToFront) {
|
||||||
state.reading = false;
|
state.reading = false;
|
||||||
|
maybeReadMore(stream, state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,3 +83,33 @@ const Readable = require('stream').Readable;
|
|||||||
r.on('readable', common.mustCall());
|
r.on('readable', common.mustCall());
|
||||||
}, 1);
|
}, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// pushing a empty string in non-objectMode should
|
||||||
|
// trigger next `read()`.
|
||||||
|
const underlyingData = ['', 'x', 'y', '', 'z'];
|
||||||
|
const expected = underlyingData.filter((data) => data);
|
||||||
|
const result = [];
|
||||||
|
|
||||||
|
const r = new Readable({
|
||||||
|
encoding: 'utf8',
|
||||||
|
});
|
||||||
|
r._read = function() {
|
||||||
|
process.nextTick(() => {
|
||||||
|
if (!underlyingData.length) {
|
||||||
|
this.push(null);
|
||||||
|
} else {
|
||||||
|
this.push(underlyingData.shift());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
r.on('readable', () => {
|
||||||
|
const data = r.read();
|
||||||
|
if (data !== null) result.push(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
r.on('end', common.mustCall(() => {
|
||||||
|
assert.deepStrictEqual(result, expected);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user