我正在研究nodeschool流冒险,并参加了双向redux挑战.
我使用双工器模块解决了这个挑战,但希望使用本机流功能来解决它.
以下是使用双工器的解决方案:
var duplexer = require('duplexer');
var through = require('through');
module.exports = function (counter) {
var counts = {};
var input = through(write, end);
return duplexer(input, counter);
function write (row) {
counts[row.country] = (counts[row.country] || 0) + 1;
}
function end () { counter.setCounts(counts) }
};
Run Code Online (Sandbox Code Playgroud)
因此,它获得可读的流,并返回双工流.我试图再次解决这个问题:
var duplexer = require('duplexer');
var stream = require('stream');
module.exports = function (counter) {
var counts = {};
var ts = stream.Transform({ objectMode: true })
ts._transform = function(obj, enc, next) {
var country = obj.country;
var count = counts[country] || 0;
counts[obj.country] = count + 1;
next();
}
ts.on('finish', function() {
counter.setCounts(counts);
});
counter.pipe(ts)
return ts;
};
Run Code Online (Sandbox Code Playgroud)
当运行原样,它会导致任何输出,所以我改next()
到next(null, JSON.stringify(counts))
.stringify是因为下一个流未设置为对象模式.我得到输出,但它错了,它抛出stream.push() after EOF
.