gpt4 book ai didi

node.js - 如何在 node.js 中清除超时

转载 作者:IT老高 更新时间:2023-10-28 23:25:06 26 4
gpt4 key购买 nike

您好,我们正在 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 语句,这会导致问题(当您尝试清除计时器时,它会创建一个新计时器并清除它,但旧的仍然会跑)。可能是笔误。

您的主要问题是将计时器“引用”存储在局部变量中。这需要封闭或全局,否则当您执行清除变量的函数时, timerknock 已经失去了它的值(value),并会尝试和 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);
}
};
})();

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

关于node.js - 如何在 node.js 中清除超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com