我有一个NodeJS stream.Readable
var async = require('async'),
util = require('util'),
ReadableStream = require('readable-stream').Readable;
function ArticleReader() {
ReadableStream.call(this, { objectMode: true });
}
util.inherits(ArticleReader, ReadableStream);
ArticleReader.prototype._read = function() {
var articles = ['article1', 'article2'];
var self = this;
async.each(articles, function(link, callback) {
self.push(article);
callback();
}, function(err) {
if (err) {
self.emit('error', err);
} else {
self.push(null);
}
});
};这是消费者:
var article = new ArticleReader();
article.on('readable', function() {
var buf = article.read();
console.log(buf);
});
article.on('end', function() {
console.log('end');
});这是输出:
'article1'问题是程序被困在'article1'上,它从不读取'article2',也从未到达end事件。
发布于 2014-11-05 08:39:34
注意,事件end会在不再需要读取的数据时触发。
另外,除非数据被完全消耗,否则end事件不会触发。这可以通过切换到flowing mode,或者通过反复调用read()来实现,直到您结束为止。
解决办法是继续阅读,直到到达流的尽头。
var readable = getReadableStreamSomehow();
readable.on('readable', function() {
while ((buf = readable.read()) != null) {
console.log(buf);
}
}
readable.on('data', function(chunk) {
console.log('got %d bytes of data', chunk.length);
})
readable.on('end', function() {
console.log('there will be no more data.');
});https://stackoverflow.com/questions/26752564
复制相似问题