2011-06-18 2 views
6

Bonjour Nous développons une application dans node.js, socket.io et redis.comment cleartimeout dans node.js

nous avons cette procédure:

exports.processRequest = function (request,result) { 
    var self = this; 
    var timerknock; 
    switch(request._command) { 
    case 'some command': // user login with username 
      // some statement 
      timerknock=setTimeout(function() { 
       //some statemetn 
      },20*1000); 
     case 'other command ': 
      // some statement  
      clearTimeout(timerknock); 
     } 
}; 

mais quand il annule la minuterie, il ne reçoit pas annulé lorsque l'autre commande est exécutée, que dois-je faire pour annuler la minuterie?

Répondre

10

Il semblerait que vous n'ayez pas les instructions break, ce qui va causer des problèmes (quand vous essaierez d'effacer la minuterie, elle créera une nouvelle minuterie et l'effacera, mais l'ancienne fonctionnera toujours). Peut-être que c'est une faute de frappe.

Votre problème principal est que vous stockez la "référence" du temporisateur dans une variable locale. Cela doit être inclus ou global, sinon lorsque vous exécutez la fonction pour effacer la variable, timerknock a perdu sa valeur et va essayer et clearTimeout(undefined) qui est bien sûr, inutile. Je suggère une fermeture simple:

exports.processRequest = (function(){ 
    var timerknock; 
    return function (request,result) { 
     var self = this; 
     switch(request._command) { 
     case 'some command': // user login with username 
     // some statement 
     timerknock=setTimeout(function() { 
      //some statemetn 
     },20*1000); 
     case 'other command ': 
     // some statement  
     clearTimeout(timerknock); 
     } 
    }; 
})(); 

Soyez conscient que cela aussi est une approche très simpliste, et si vous définissez une minuterie avant l'actuel a terminé son exécution, vous perdez la référence à cette minuterie. Cela peut ne pas poser de problème pour vous, bien que vous puissiez essayer de l'implémenter un peu différemment, avec un objet/tableau de références de minuterie.