gpt4 book ai didi

javascript - nodejs 流可读卡在第一个可读对象

转载 作者:行者123 更新时间:2023-11-30 12:33:49 26 4
gpt4 key购买 nike

我有一个 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 事件。

最佳答案

请注意,end 事件会在没有更多数据 可读取时触发。

此外,end 事件不会触发,除非数据被完全消耗掉。这可以通过切换到 流动模式 或通过重复调用 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.');
});

关于javascript - nodejs 流可读卡在第一个可读对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26752564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com