2017-03-31 2 views
0

Nous avons une demande d'API qui logins nos utilisateurs, comme ceci:Comment calculer le temps d'exécution dans NodeJS ChildProcess.exec

... 

//lauches an API request 

router.post("/trip/analyse",function(req,res){ 

    t0 = Date.now(); 

    shell = ("sudo /usr/bin/python /mypythonFile"); 

    child = exec(shell, function (error, stdout, stderr) { 

     if (error) { //There is an error 

     res.json({"Error" : true}); 

     console.log(Date.now() - t0); // <-------- HERE, How to get this right ? 

     }else{ //everything went fine 

     res.json({"Error" : false}); 

     console.log(Date.now() - t0); // <-------- HERE, How to get this right ? 

     } 

    }); 

}); 
... 

Je vois que le temps d'exécution imprimée n'est pas juste, parce que, quand de nombreux utilisateurs se connecter à en même temps, la valeur "t0" utilisée pour calculer l'executionTime ("Date.now() - t0") n'est pas correctement calculée. Il utilise les valeurs t0 d'un appel plus récent de cette requête API, et non la valeur t0 appropriée. Ceci est dû au fait que la méthode exec est asynchrone et prend du temps à s'exécuter.

Comment corriger correctement l'heure d'exécution ("Date.now() - t0"), où la variable t0 d'origine est perdue?

+1

Pourquoi la variable est-elle globale? Ceci est probablement à l'origine de votre problème. Étendre les variables t0 etc. à la fonction ajoutant var avant. – mrdotb

+0

Oh merci beaucoup !! ça l'a réparé !! – inconnu26

Répondre

0

Je ne devais mettre

var t0 = Date.now();

Et ça a marché!

+0

Marquer comme résolu et pour les meilleures pratiques, n'utilisez jamais de variable globale en javascript. – mrdotb