簡體   English   中英

節點異步流管道

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM