2016-08-31 8 views
0

Я пытаюсь создать функцию предупреждения, которая срабатывает после 5 минут, если мой гаражный дом все еще открыт. Проблема в том, что независимо от того, какое сообщение появляется после «offen», cleartimeout не работает, поэтому Alert выполняется после каждого статуса «offen». был бы здорово, если бы кто-то может дать мне подсказку ...node.js clearTimeout() не работает

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); 
     } 
    } 
+1

Прошу подробно показать код. откуда вы называете handleGarageState? В какой области вы определяете оповещение? – Adam

+1

просто добавьте еще одно clearTimeout до setTimeout. Что-то вроде if (alert) {clearTimeout (alert); } – KoIIIeY

+0

Я попытался определить предупреждение variabel в инструкции if (отредактировал его прямо сейчас), а также как глобальную переменную (var alert = "";) – volker

ответ

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); 
    } 
} 
+0

просто протестировал его, и он сработал! Спасибо. Решением было сочетание определения переменной вне ** и ** добавления дополнительного clearTimeout. – volker

0

Я do'nt увидеть, где вы определили предупреждение, так что, возможно вы получили Оффны несколько раз, и вы не четкий старый таймаута и вы перезаписать уведомление значение и очистить только последний тайм-аут.