我在Node 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();
经过一番猜测后,我找到了解决方法:
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();
但是documentation说,暂停是建议性的,这让我很困惑。我为什么要暂停一个没有连接的流?
答案 0 :(得分:4)
0.10 revamped the Streams API并添加了以下行为更改:
警告:如果您从未添加
'data'
事件处理程序或致电resume()
,那么它将永远处于暂停状态并且永远不会发出{{1} }。
因此,在0.10中,流将等待有效的侦听器(如'end'
)或强制pipe
而没有明确的resume
。
另一方面,0.8岁及以上的电子邮件将立即开始发送pause
,除非指示'data'
。并且,在这种情况下,这会在超时和流之间创建竞争条件 - 流可能在超时到期之前部分运行甚至完成。