2011-06-18 24 views
6

Merhaba Biz node.js, socket.io ve redis'te uygulama geliştiriyoruz.node.js içinde cleartimeout nasıl yapılır

bu prosedür var:

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

ancak diğer komuta çalıştırıldığında iptal almıyor zamanlayıcı i zamanlayıcıyı iptal etmek ne yapmalıyız iptal zaman?

cevap

10

break ifadelerine sahip olmamanız, bu da sorunlara neden olacaktır (zamanlayıcıyı temizlediğinizde, yeni bir zamanlayıcıyı açıp temizleyecektir, ancak eski kişi hala çalışmaya devam edecektir). Belki bu bir yazım hatasıdır.

Ana sorun, yerel bir değişkende "referans" zamanlayıcıyı saklamaktır. Bu, kapalı veya küresel olması gerekir, aksi halde değişkenini temizlemek için işlevi çalıştırdığınızda, timerknock değerini kaybetti ve clearTimeout(undefined) çalışacaktır, tabii ki işe yaramaz.

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

bu da çok basit bir yaklaşım olduğunu unutmayın ve geçerli bir sonra yürütme bittikten önce bir zamanlayıcı ayarlamak eğer o zamanlayıcı başvurusunu kaybetmek: Basit bir kapatma düşündürmektedir. Bu, sizin için bir sorun olmayabilir, ancak bunu bir nesne/dizi zamanlayıcı referansları ile biraz farklı bir şekilde uygulamaya çalışabilirsiniz.

İlgili konular