streams2: Use StringDecoder.end

This commit is contained in:
isaacs 2012-10-12 11:45:17 -07:00
Родитель cf0b4ba410
Коммит f624ccb475
1 изменённых файлов: 23 добавлений и 1 удалений

Просмотреть файл

@ -153,6 +153,13 @@ Readable.prototype.read = function(n) {
if (!chunk || !chunk.length) {
// eof
state.ended = true;
if (state.decoder) {
chunk = state.decoder.end();
if (chunk && chunk.length) {
state.buffer.push(chunk);
state.length += chunk.length;
}
}
// if we've ended and we have some data left, then emit
// 'readable' now to make sure it gets picked up.
if (!sync) {
@ -395,11 +402,26 @@ Readable.prototype.wrap = function(stream) {
stream.on('end', function() {
state.ended = true;
if (state.length === 0)
if (state.decoder) {
var chunk = state.decoder.end();
if (chunk && chunk.length) {
state.buffer.push(chunk);
state.length += chunk.length;
}
}
if (state.length > 0)
this.emit('readable');
else
endReadable(this);
}.bind(this));
stream.on('data', function(chunk) {
if (state.decoder)
chunk = state.decoder.write(chunk);
if (!chunk || !chunk.length)
return;
state.buffer.push(chunk);
state.length += chunk.length;
this.emit('readable');