为什么瀑布这么慢?

时间:2010-12-13 16:55:14

标签: javascript node.js async.js

我正在使用异步模块(请参阅https://github.com/caolan/async)获取Node.js,我的问题是...... 为什么瀑布这么慢?

执行这段代码需要 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 个答案:

答案 0 :(得分:3)

这只是另一个Node.js Bug。

在待处理的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修改async.nextTick,仅使用setTimeout

错误:我已就此提交了issue