我尝试建立一个警报功能,如果我的车库仍然打开,它会在5分钟后触发。问题是,无论在" offen"之后发生什么信息。 cleartimeout不起作用,因此警报在每个" 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') {
var alert = setTimeout(function () {
console.log("ALERT "); //here will be the alert function
}, 60000 * 5)
} else {
clearTimeout(alert);
}
}
答案 0 :(得分:2)
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 alert
。问题是,旧alert
仍然在某处等待。
在放置新的超时之前,您需要将alert
集中在函数范围和之前将其清除。
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);
}
}
答案 1 :(得分:0)
我确实看到了你定义警报的位置,所以也许你已多次离开并且你没有清除旧的超时并且你覆盖警报值并且只清除最后一次超时。