2016-08-31 10 views
0

私はgaragoorがまだ開いていると5分後に起動する警告機能を構築しようとしています。問題は、 "offen"の後にどのメッセージが来てもcleartimeoutは機能しないので、警告はすべての "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

setTimeoutの前に別のclearTimeoutを追加するだけです。何かのようなものif(alert){clearTimeout(alert); } – KoIIIeY

+0

私は変数ステートメント(現在編集中)とグローバル変数(var alert = "";)内にvariabelアラートを定義しようとしました – 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); 
    } 
} 

この関数を呼び出すたびに、新しい変数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の、ので、多分あなたはoffen複数回を持って、あなたは明確な古いタイムアウトがないとアラートを上書き最後のタイムアウトだけをクリアします。

関連する問題