JavaScript中的Streams

时间:2015-06-21 11:03:25

标签: javascript node.js stream

我正在使用gulp并且想要创建一个可以通过管道输入的功能,将输入传递给输出并将一行写入控制台。

例如:

   this.src('/foo')
        .pipe(myFunction)
        .pipe(...)

有人可以帮我理解myFunction需要的样子吗?

以下代码会停止其轨道中的流。如何确保流数据向前传递?

function myFunction(obj) {
  var stream = new Stream.Transform({objectMode: true});

  stream._transform = function () {
    console.log('foo bar bam baz');
  };

  return stream;
}

1 个答案:

答案 0 :(得分:2)

转换流意味着 - 毫无疑问 - 用于数据转换。一个例子是zlib流,它压缩写入它的数据,压缩的字节可以从同一个流中读出。

您正在创建一个不会转换任何内容的转换流 - 这很好。但是你仍然需要传递“变换值”(在这种情况下是相同的值)。在它的当前形式中,您的流只消耗所放入的内容._transform函数接收3个参数:数据,编码和回调,必须像下面这样调用:

function myFunction(obj) {
    var stream = new Stream.Transform({objectMode: true});

    stream._transform = function (data, encoding, callback) {
        console.log('foo bar bam baz');
        callback(null, data);
    };

    return stream;
}

来源:https://nodejs.org/api/stream.html#stream_transform_transform_chunk_encoding_callback

节点流的优秀指南: https://github.com/substack/stream-handbook