2010-12-13 67 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.js线63 modifiy async.nextTick只使用setTimeout

Bug:我对此提交了一个issue

+0

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