2017-04-06 6 views
0

私は小さなJavaScriptテキストRPGを作っており、30分ごとにいくつかの値をクリアしたい。これらは私の目的のためのログに過ぎませんが、残念ながら今はデバッグに必要です。オブジェクトをクリアするには30分(長時間)?

例えば、私はgameLog = {}を持っています。私は、実行されたときに私の機能のいくつかからの追跡のためにいくつかのキーを追加しています。私は30分ごとにこれをクリアするだけですが、長期的に実行する必要があります。それをする最善の方法は何ですか?おかげ

+0

おそらく* setTimeout *を削除してすべてのプロパティを削除するか、* null *に設定しますか?何を試しましたか? – RobG

+0

私はタイムアウトを設定しましたが、それは一度だけ発生します。私はsetIntervalを行うことができますが、これを行うためのより良い方法があるか、それはうまくいくはずですか? – user1354934

+0

setTimeoutを呼び出すたびに、もう一度呼び出す必要がある場合は作業してから、30分後に自分自身を呼び出します。 * setInterval *を使うのが好ましいと思います。 – RobG

答えて

1
// initialize gameLog as global variable 
gameLog = {}; 

function gameLogClear(){ 
    gameLog = {}; 
} 

// setup repeating job 
gameLogClearTimer = setInterval(gameLogClear, 30 * 60 * 1000); 

// timer can be removed with: 
// clearInterval(gameLogClearTimer); 

参考文献:

+0

'gameLog = {}'は古いものを "クリア"せず、新しいオブジェクトを作成して古いオブジェクトがハングアップするようにします。 – RobG

+0

@RobG技術的には、古いオブジェクトを参照する場合は、ぶらぶらします。関連する項目に「破棄」とラベルを付ける方がより正確です。 – Ouroborus

0

あなたはgameLogオブジェクトを持っている場合、あなたはそのすべてのプロパティを削除するにはのsetTimeoutを使用することができ、すべての30分にして、続行したい場合はに電話してくださいsetTimeoutをもう一度30分繰り返します。 CLEARLOGは、次ののsetTimeout実行後に実行を停止します偽手段にkeepGoingを設定する任意の時点で

var keepGoing = true; 
 
var gameLog = Object.create(null); 
 
gameLog.someProperty = 'foo'; // some initial property 
 

 
var clearLog = (function() { 
 
    var lag; 
 
    return function (delay) { 
 
    lag = lag || delay || 1.8e6; // default is 30 minutes 
 
    Object.keys(gameLog).forEach(function(key) { 
 
     delete gameLog[key]; 
 
    }); 
 
    if (keepGoing) { 
 
     setTimeout(clearLog, lag) 
 
    } 
 
    console.log('log cleared... ' + JSON.stringify(gameLog)); 
 
    }; 
 
}()); 
 

 
clearLog(1000); // call every second for example

、。また、によって返された値を覚えて、それをキャンセルすることもできます。

は、私はおそらく、スタートのために(definePropertyを使用して)列挙不可能なメソッドを持つオブジェクトとしてgameLogを実装して、明確な記述、および停止は、それをクリアしても、setTimeoutメソッドを停止している停止すると思います。

関連する問題