Node.js 节点异步流管道

Node.js 节点异步流管道,node.js,asynchronous,stream,Node.js,Asynchronous,Stream,我在节点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 = requir

我在节点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();
但是说,暂停是建议,这让我困惑。为什么要暂停未连接到任何位置的流?

并添加了以下行为更改:

警告:如果您从未添加
'data'
事件处理程序,或调用
resume()
,则它将永远处于暂停状态,并且永远不会发出
'end'

因此,在0.10中,流将等待一个有效的侦听器,比如
管道
,或者在没有显式
暂停的情况下强制执行
恢复


另一方面,0.8及以上版本的蒸汽将立即开始发送
“数据”
,除非指示暂停
。在这种情况下,这在超时和流之间创建了一个竞争条件——流可能会部分运行,甚至在超时过期之前完成。

我认为旧式(0.10之前)流不应该被称为流,而应该被称为其他流。我认为,对于那些对来自其他语言的流API应该是什么样子抱有某种期望的人来说,这是一个非常混乱的根源。@UstamanSangat“流”只是随时间传输的顺序数据;他们当然是这样。API应该得到什么是一个完全不同的争论问题。但是,期望一种语言的功能在另一种语言中完全匹配通常不是一个安全的赌注。。。但他们显然屈服了,并意识到在0.10;-)