[英]Node async stream piping
我有這個代碼在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();
但文檔說,暫停是建議,這讓我很困惑。 我為什么要暫停流,哪個沒有連接?
0.10修改了Streams API並添加了以下行為更改:
警告 :如果您從未添加
'data'
事件處理程序或調用resume()
,那么它將永遠處於暫停狀態並且永遠不會發出'end'
。
因此,在0.10中,流將等待有效的偵聽器(如pipe
)或強制resume
而沒有明確的pause
。
另一方面,0.8及以上的蒸汽將立即開始發送'data'
,除非指示pause
。 並且,在這種情況下,這會在超時和流之間創建競爭條件 - 流可能在超時到期之前部分運行甚至完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.