nodejs从可读写的双工流创建

时间:2015-02-12 23:13:15

标签: node.js stream

我正在进行nodeschool stream冒险,并参加了双向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) }
};

因此,它获得了一个可读的流,并返回一个双工流。我试图用以下方法再次解决这个问题:

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;
};

按原样运行时,根本不会产生任何输出,因此我将next()更改为next(null, JSON.stringify(counts))。 stringify是因为下一个流未设置为对象模式。我得到输出,但它错了,它会抛出stream.push() after EOF

0 个答案:

没有答案