node.js clearTimeout()不工作
我尝试建立一个警报功能,如果我的车库门仍然打开,它会在5分钟后触发。问题是,无论在“offen”之后出现什么消息,cleartimeout都不起作用,因此在每个“offen”状态之后都会执行警报。如果有人能给我一个提示就太好了node.js clearTimeout()不工作,node.js,cleartimeout,Node.js,Cleartimeout,我尝试建立一个警报功能,如果我的车库门仍然打开,它会在5分钟后触发。问题是,无论在“offen”之后出现什么消息,cleartimeout都不起作用,因此在每个“offen”状态之后都会执行警报。如果有人能给我一个提示就太好了 function handleGarageState(message) { Status = message.toString(); garageState = message io.emit('Garagenstatus',
function handleGarageState(message) {
Status = message.toString();
garageState = message
io.emit('Garagenstatus', {
data: String(garageState)
});
var Eintrag = {
Datum: moment().format('YYYY-MM-DD HH:mm:ss'),
Status: Status
};
writeStatus(Eintrag);
if (Status == 'offen') {
var alert = setTimeout(function () {
console.log("ALERT "); //here will be the alert function
}, 60000 * 5)
} else {
clearTimeout(alert);
}
}
我看不出您在哪里定义了警报,所以可能您多次收到offen,您没有清除旧的超时,您覆盖了警报值,只清除了最后一个超时
function handleGarageState(message) {
Status = message.toString();
garageState = message;
io.emit('Garagenstatus', {
data: String(garageState)
});
var Eintrag = {
Datum: moment().format('YYYY-MM-DD HH:mm:ss'),
Status: Status
};
writeStatus(Eintrag);
if (Status == 'offen') {
//v-- Here
var alert = setTimeout(function () {
console.log("ALERT "); //here will be the alert function
}, 60000 * 5)
} else {
clearTimeout(alert);
}
}
每次调用该函数时,您都会创建一个新的var警报。问题是,旧的警报仍在某处等待。
您需要将警报集中在功能范围之外,并在设置新超时之前清除警报
var alert;
function handleGarageState(message) {
Status = message.toString();
garageState = message;
io.emit('Garagenstatus', {
data: String(garageState)
});
var Eintrag = {
Datum: moment().format('YYYY-MM-DD HH:mm:ss'),
Status: Status
};
writeStatus(Eintrag);
if (Status == 'offen') {
clearTimeout(alert);
alert = setTimeout(function () {
console.log("ALERT "); //here will be the alert function
}, 60000 * 5)
} else {
clearTimeout(alert);
}
}
请显示更多的代码。你从哪里叫手足妊娠?您在哪个范围内定义警报?只需在setTimeout之前添加另一个clearTimeout。类似于if(alert){clearTimeout(alert);}我试图在if语句中定义variabel警报(立即编辑),也可以将其定义为全局变量(var alert=“”;),现在,您已经修改了示例,在handleGarageState的范围内定义了警报,这意味着,当您将它作为参数提供给clearTimeout.hmm时,它总是未定义的,因此在if语句中定义它是错误的。我已经用一个全局变量试过了-同样的问题…只是测试了一下,它成功了!!非常感谢。在外部定义变量和添加额外的clearTimeout的组合是解决方案。