2011-06-18 14 views
6

Hola, estamos desarrollando aplicaciones en node.js, socket.io y redis.cómo cleartimeout en node.js

tenemos este procedimiento:

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

pero cuando se cancela el temporizador no se está cancelada cuando se ejecuta otro comando, ¿qué debo hacer para cancelar el temporizador?

Respuesta

10

Parece que no tiene declaraciones break, lo que puede causar problemas (cuando intente borrar el temporizador, creará un nuevo temporizador y lo borrará, pero el anterior seguirá ejecutándose). Tal vez eso es un error tipográfico.

Su problema principal es que está almacenando la "referencia" del temporizador en una variable local. Esto debe ser cerrado o global, de lo contrario, cuando ejecute la función para borrar la variable, timerknock ha perdido su valor e intentará y clearTimeout(undefined), lo cual es, por supuesto, inútil. Sugiero un cierre 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); 
     } 
    }; 
})(); 

Tenga en cuenta que esto también es un enfoque muy simplista, y si se establece un temporizador antes de la actual ha terminado de ejecutarse, entonces perder la referencia a este temporizador. Puede que esto no sea un problema para usted, aunque puede tratar de implementarlo de forma un poco diferente, con un objeto/matriz de referencias de temporizador.