Nodeschool 的 Stream-Adventure #12 双工器 redux

Nodeschool's Stream-Adventure #12 Duplexer redux

自从我尝试了几种方法来解决这个练习以来已经有好几天了。我放弃。我在这里做错了什么?如果我使用的事件是 "end" 事件并且我没有向管道写入任何内容,为什么我会收到 "write after end" 错误?我只是在使用后更改一个对象。或者至少我是这么认为的。

var duplexer2 = require("duplexer2");
var through = require('through2');


module.exports = function (counter) {
    var countries = {};        

    var duplex = duplexer2(through.obj(function (obj, encoding, done) {
        if (obj.country in countries)
            countries[obj.country]++;
        else 
            countries[obj.country] = 1;  
        done();
    }), counter);

    duplex.on("finish", function() {
        counter.setCounts(countries);
    });

    counter.pipe(duplex);

    return duplex;
};

如果我将 counter.setCounts(countries); 行替换为 console.log(countries),我发现它已正确填充。

问题文本:http://pastebin.com/vAM4vKZg

我已阅读此练习测试文件,但无法从中获得任何线索,因为它只是比较对象以查看它们是否正确。

您的解决方案几乎是正确的。只需删除 counter.pipe(duplex); 行即可。您不需要将任何东西通过管道传输到您创建的双工流,stream adventure 将这样做以检查它是否有效:)。