2010-12-13 4 views
4

J'utilise le module async (voir https://github.com/caolan/async) pour Node.js et ma question est ... Pourquoi la cascade est-elle si lente?Pourquoi la cascade est-elle si lente?

Il faut environ 4 secondes pour exécuter ce morceau de code ...

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 

}); 

} 

sortie

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

Merci pour la réponse!

+1

Qu'est-ce que la réponse? Aussi est-ce le vrai code? Parce que cela s'exécute immédiatement ici. –

+0

J'utilise Node.js v0.3.2-pre, quelle version utilisez-vous? –

+0

Je suis sur 3.2-pre (5a87bd168d8fbeca7d48b9ddaa3b4e8a9336719c) aussi, mais la question est de savoir à quoi ressemble votre code réel? –

Répondre

3

C'est juste un autre bug Node.js.

L'utilisation de process.nextTick à l'intérieur d'un autre process.nextTick au cours d'un http.ServerResponse en attente est rompue.

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); 

Cela prend une éternité, async.js appelle les callbacks à l'intérieur des autres callbacks qui ont été appelés par process.nextTick qui se traduit alors par le bug ci-dessus déclenchée.

Quick fix: En async.js ligne 63 modifiy async.nextTick à utiliser uniquement setTimeout.

Bogue: J'ai déposé un issue à ce sujet.

+0

Merci, Ivo! –

Questions connexes