node.js clearTimeout()不起作用

时间:2016-08-31 13:18:12

标签: node.js cleartimeout

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

2 个答案:

答案 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)

我确实看到了你定义警报的位置,所以也许你已多次离开并且你没有清除旧的超时并且你覆盖警报值并且只清除最后一次超时。