`Node.js中的`stream.Transform.unshift()`

考虑一个简单的例子:

stream = require 'stream' util = require 'util' class TestTransform extends stream.Transform _transform: (chunk, encoding, callback) -> if not @noMore @noMore = true @unshift chunk # I will handle you later else @push " <#{chunk.toString().toUpperCase()}>" callback() mt = new TestTransform() mt.write 'first' mt.write 'second' mt.on 'data', (chunk) -> console.log "data: #{util.inspect chunk.toString()}" 
 $ coffee test.coffee data: 'first <SECOND>' 

这个转换stream试图推回它的第一个块回读队列,所以它将在下一个_transform调用处理。

但由于某些原因,在Transform中不进行Transform会导致数据立即进入输出,而不会再次进入_transform (因此不会大写)。 这是故意还是我错过了什么?

unshift是一个Readable方法。 这意味着当你在变换中调用它时,你将东西推回到输出端缓冲区,而不是input端。

不要这样做。 由于您无法知道输出端缓冲区有多less,所以这实际上是以非确定性的顺序推送数据。