2010-12-13 22 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

レスポンスとは何ですか?また、実際のコードですか?これはすぐにここで実行されるためです。 –

+0

Node.js v0.3.2-preを使用していますが、どのバージョンを使用していますか? –

+0

私は3.2-pre(5a87bd168d8fbeca7d48b9ddaa3b4e8a9336719c)でもありますが、依然として問題はあなたの実際のコードはどのように見えますか? –

答えて

3

これはもう1つの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); 

これは次いで、上記不具合がトリガされ、その結果process.nextTickを介して呼び出された他のコールバック内からのコールバックを呼び出すasync.js永遠を取ります。

クイックフィックス:async.nextTick modifiyライン63async.jsでは唯一setTimeoutを使用します。

バグ:私はこれにissueを提出しました。

+0

ありがとう、Ivo! –

関連する問題