为什么此流函数会导致错误



我编写了一个要通过管道传送到的函数,它将提供的参数记录到控制台。

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 )。这样,您可以在一种流类型之间转换到另一种流类型。

相关内容

  • 没有找到相关文章

最新更新