我已经编写了要传递到的函数,该函数会将提供的参数记录到控制台。
function sconsole() {
var stream = new Stream.Transform({objectMode: true}),
foo = [].slice.call(arguments);
stream._transform = function (data, encoding, callback) {
console.log.apply(null, foo);
callback(null, data);
};
return stream;
}
使用示例:
stream
.pipe(sconsole('foo'))
.pipe(...);
但是,当在一系列管道调用的最后位置使用它时,它将导致以下错误:
TypeError: Invalid non-string/buffer chunk
为什么?
最佳答案
您不能像这样将objectMode
和非objectMode
流混合/管道传输在一起,因为它们可以使用不同的数据类型。
但是,如果您拥有节点v0.12 +或io.js,则可以使用readableObjectMode: true
之类的方法,该方法设置转换流的可读性以读取对象,但按常规写入字节。您可以使用writableObjectMode: true
进行其他类似的操作(objectMode: true
等同于将这两个属性都设置为true
)。这样,您就可以在一种流类型之间转换。