2010-12-13 107 views
4

我爲Node.js使用異步模塊(請參閱https://github.com/caolan/async),我的問題是... 爲什麼瀑布如此之慢?爲什麼瀑布如此之慢?

大約需要4秒執行這段代碼...

App.post("/form", function(request, response) { 

Async.waterfall([ 

    function(callback) { 

    console.log("1."); 
    callback(null, "some data"); 

    }, 

    function(data, callback) { 

    console.log("2.");    
    callback(null, "some data"); 

    }, 

    function(data, callback) { 

    console.log("3."); 
    callback(null, "some data");    

    } 

], function(error, document) { 

    console.log("4.");    
    console.log("Done."); 

    response.send(); // Takes 4 seconds 

}); 

} 

輸出

1. 
2. 
// After 4 seconds 
3. 
4. 
Done. 

感謝您的回覆!

+1

什麼是響應?還有,真正的代碼?因爲這在這裏立即執行。 – 2010-12-13 17:30:57

+0

我正在使用Node.js v0.3.2-pre,你使用哪個版本? – 2010-12-13 17:34:52

+0

我也是3.2-pre(5a87bd168d8fbeca7d48b9ddaa3b4e8a9336719c),但問題仍然是你的真實代碼是怎樣的? – 2010-12-13 17:47:32

回答

3

這只是另一個Node.js錯誤。

使用process.nextTick在另一個process.nextTick期間在未決的http.ServerResponse被打破。

var http = require('http'); 
http.createServer(function(req, res) { 
    var now = new Date(); 
    process.nextTick(function() { 
     process.nextTick(function() { 
      console.log(new Date() - now); 
      res.writeHead({}); 
      res.end('foooooo'); 
     }); 
    }); 
}).listen(3000); 

這需要一個永恆,async.js從其中經由process.nextTick其然後導致上述錯誤被觸發稱爲其他回調內部調用回調。

快速修復:async.js63 modifiy async.nextTick只使用setTimeout

Bug:我對此提交了一個issue

+0

謝謝伊沃! – 2010-12-13 19:25:25