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 将这样做以检查它是否有效:)。
自从我尝试了几种方法来解决这个练习以来已经有好几天了。我放弃。我在这里做错了什么?如果我使用的事件是 "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 将这样做以检查它是否有效:)。