Похоже, у вас нет операторов 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);
}
};
})();
Имейте в виду, что это тоже очень упрощенный подход, и если вы установите таймер до того, как текущий завершит выполнение, вы потеряете ссылку на этот таймер.Это не может быть проблемой для вас, хотя вы можете попытаться реализовать это немного по-другому, используя объект / массив ссылок на таймеры.