节点asynchronousstreampipe道

我有这个代码工作在节点0.10,但它不打印0.8

var http = require('http'); var req = http.request('http://www.google.com:80', function(res) { setTimeout(function() { res.pipe(process.stdout); }, 0); }); req.end(); 

经过一番猜测,我find了解决办法:

 var http = require('http'); var req = http.request('http://www.google.com:80', function(res) { res.pause(); setTimeout(function() { res.resume(); res.pipe(process.stdout); }, 0); }); req.end(); 

但文件说,停顿是咨询,这是让我困惑。 为什么我应该暂停stream,这是不是连接在任何地方?

0.10修改了Streams API并添加了以下行为更改:

警告 :如果你永远不会添加一个'data'事件处理程序,或者调用resume() ,那么它将永远处于暂停状态,永远不会发出'end'

所以,在0.10中,stream将等待一个有效的监听器,比如一个pipe ,或者一个没有明确pause的强制resume

另一方面,0.8以上的蒸汽将会立即开始发送'data' ,除非被指示pause 。 而且,在这种情况下,这会在超时和stream之间创build争用条件 – stream可能会在超时到期之前部分运行或者甚至完成。