`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,所以这实际上是以非确定性的顺序推送数据。