从数组和管道值创建可读流到可写流的最佳方法是什么?我已经看到使用 setInterval 的子堆栈示例,并且我可以使用 0 作为间隔值成功实现该示例,但是我正在迭代大量数据并且每次触发 gc 都会减慢速度。
// Working with the setInterval wrapper
var arr = [1, 5, 3, 6, 8, 9];
function createStream () {
var t = new stream;
t.readable = true;
var times = 0;
var iv = setInterval(function () {
t.emit('data', arr[times]);
if (++times === arr.length) {
t.emit('end');
clearInterval(iv);
}
}
}, 0);
// Create the writable stream s
// ....
createStream().pipe(s);
我想做的是在没有 setInterval 的情况下发出值。也许像这样使用异步模块:
async.forEachSeries(arr, function(item, cb) {
t.emit('data', item);
cb();
}, function(err) {
if (err) {
console.log(err);
}
t.emit('end');
});
在这种情况下,我迭代数组并发出数据,但从不管道任何值。我已经看过 shinout 的ArrayStream,但我认为它是在 v0.10 之前创建的,它的开销比我想要的要多。