node.js clearTimeout()不工作

node.js clearTimeout()不工作,node.js,cleartimeout,Node.js,Cleartimeout,我尝试建立一个警报功能,如果我的车库门仍然打开,它会在5分钟后触发。问题是,无论在“offen”之后出现什么消息,cleartimeout都不起作用,因此在每个“offen”状态之后都会执行警报。如果有人能给我一个提示就太好了 function handleGarageState(message) { Status = message.toString(); garageState = message io.emit('Garagenstatus',

我尝试建立一个警报功能,如果我的车库门仍然打开,它会在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);
      }
    }

我看不出您在哪里定义了警报,所以可能您多次收到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的组合是解决方案。