2017-04-06 5 views
0

Ich mache ein kleines Javascript Text RPG, und ich möchte alle Werte alle 30 Minuten löschen. Dies sind nur Logs für meine Zwecke, aber leider brauche ich sie jetzt zum Debuggen.So löschen Sie ein Objekt 30 Minuten (lange Laufzeit)?

Zum Beispiel habe ich eine gameLog = {}, zu der ich einige Schlüssel für die Verfolgung von einigen meiner Funktionen hinzufügen, wie sie ausgeführt werden. Ich möchte das alle 30 Minuten löschen, aber ich brauche es, um lange zu laufen. Was ist der beste Weg, das zu tun? Dank

+0

Wahrscheinlich * setTimeout * und löschen Sie alle Eigenschaften, oder legen Sie sie auf * null *? Was hast du probiert? – RobG

+0

Ich habe ein Zeitlimit gesetzt, aber das wird nur einmal passieren. Ich kann setInterval einstellen, aber gibt es einen besseren Weg, dies oder jenes zu tun? – user1354934

+0

Jedes Mal, wenn Sie setTimeout aufrufen, trainieren Sie, ob Sie es erneut anrufen möchten, und rufen Sie es dann in weiteren 30 Minuten an. Ich denke, das ist besser als * setInterval *. – RobG

Antwort

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); 

Referenzen:

+0

'gameLog = {}' "löscht" nicht das alte, es erstellt ein neues Objekt, so dass das alte herumhängen kann ... – RobG

+0

@RobG Technisch gesehen, ja, wenn Sie zufällig einen anderen Verweis auf das alte Objekt haben wird herumhängen. Es wäre genauer, die relevanten Artikel als "verwerfen" zu bezeichnen. – Ouroborus

0

, wenn Sie einen gameLog Objekt haben, dann können Sie SetTimeout verwenden alle alle 30 seine Eigenschaften löschen Minuten und, wenn Sie weitermachen möchten, rufen Sie setTimeout wieder für weitere 30 Minuten und so weiter.

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

jederzeit keepGoing auf false bedeutet clearLog läuft stoppt nach dem nächsten läuft SetTimeout. Sie können sich auch an den Wert erinnern, der von setTimeout zurückgegeben wird, und diesen auch abbrechen.

würde ich wahrscheinlich gameLog als Objekt mit nicht-zählbaren Methoden (mit defineProperty) für Start, schreibe, klar, implementieren und stoppen, wo sie Anschlag löscht und stoppt auch die setTimeout.

Verwandte Themen