如何在node.js中清理

嗨我们正在开发node.js,socket.io和redis的应用程序。

我们有这个程序:

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

但是当取消定时器时,其他命令执行时不会取消,我该怎么做取消定时器?

看起来你没有break语句,这会导致问题(当你尝试清除计时器时,它会产生一个新的计时器并清除它,但是旧计时器仍然会运行)。 也许这是一个错字。

你的主要问题是你将定时器“引用”存储在本地variables中。 这需要是封闭的或全局的,否则当你执行函数来清除variables时, timerknock已经失去了它的价值,并尝试clearTimeout(undefined) ,这当然是没用的。 我build议一个简单的closures:

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

请注意,这也是一个非常简单的方法,如果您在当前执行完成之前设置了一个计时器,那么您将失去对该计时器的引用。 这对你来说可能不是问题,虽然你可能试着用一个对象/数组的定时器引用来稍微改变它。