var streams = require('stream');
var util = require('util');
util.inherits(JSONObjectStream, streams.Transform);
function JSONObjectStream(opt){
streams.Transform.call(this, opt);
}
JSONObjectStream.prototype._transform = function(data, encoding, callback){
object = data ? JSON.parse(data.toString()) : "";
this.emit("object", object);
object.handled = true;
this.push(JSON.stringify(object));
callback();
};
JSONObjectStream.prototype._flush = function(cb){
cb();
};
var tc = new JSONObjectStream();
tc.on("object", function(object){
console.log("Name: %s", object.name);
console.log("Color: %s", object.color);
});
tc.on("data", function(data){
console.log("Data: %s", data.toString());
});
tc.write('{"name": "Carolinus", "color": "Green"}');
tc.write('{"name": "Solarius", "color": "Blue"}');
我对上面的代码有很多疑问。我已经对它进行了测试,它确实可以正常运行。
第一个问题: 如何"选择"参数在函数JSONObjectStream(opt)中获取其值?当我创建" tc"时,我看不到任何值。对象
第二个问题: 当我对变换方法进行原型化时,"回调"参数收到它的值?当我用tc.write()调用方法时,我没有看到传递给它的值。
第三个问题: flush()方法在这个程序中的用途是什么?我没有看到它在代码中的任何地方被调用。如果它被称为某个地方,那么它的" cb"参数收到它的值?
第四个问题: 变量"对象"能够宣布?它之前既没有var也没有。
我从一本书中得到了这个代码,但我无法弄清楚它是如何工作的。
感谢您花时间查看它!