2011-06-18 5 views
6

こんにちは、node.js、socket.io、redisでアプリケーションを開発しています。node.jsでcleartimeoutを行う方法

私たちは、この手順を持っている:

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

が、それは他のコマンドが実行されたときに、それがキャンセルなっていないタイマーをキャンセルしたときに、私はタイマーをキャンセルするために何をすべきでしょうか?

答えて

10

breakステートメントがあり、問題が発生するようです(タイマーをクリアして新しいタイマーを作成してクリアしますが、古いタイマーは引き続き実行されます)。多分それはタイプミスです。

主な問題は、ローカル変数にタイマー「参照」を保存していることです。これは囲まれているかグローバルである必要があります。それ以外の場合は、変数をクリアする関数を実行すると、timerknockはその値を失い、試してみます。clearTimeout(undefined)は無駄です。

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

が、これはあまりにも非常に単純なアプローチである、とあなたは、タイマーを設定した場合、現在の1はあなたがそのタイマーへの参照を失い、その後実行を終了した前のことに注意してください:私は、単純な閉鎖を示唆しています。タイマー参照のオブジェクト/配列を少し違って実装しようとするかもしれませんが、これはあなたにとっては問題ではないかもしれません。

関連する問題