2017-03-16 4 views
-1

Vielleicht ist meine Frage nicht genau richtig, aber im Grunde muss ich wissen, die einfachste Möglichkeit, alle meine Variablen innerhalb meiner Node js-Anwendung mit dem Npm-Paket-Knoten Cron (https://www.npmjs.com/package/node-cron) zurückgesetzt .Zurücksetzen aller Variablen im Speicher mit Nodejs

Allerdings denke ich, das passiert nur mit meinen Arrays.

Das Paket funktioniert großartig ... Meine Funktion läuft im geplanten Intervall, aber jedes Mal, wenn es ausgeführt wird, werden die zuvor geplanten Aufgabenvariablen nicht aus dem Speicher freigegeben. Im Wesentlichen scheint es so zu sein, dass jede Iteration in die letzte hinzugefügt wird.

Wie empfiehlt es sich, alles aus dem Speicher freizugeben, damit die alten Daten nicht bei jeder Ausführung der Aufgabe gespeichert werden?

Beispiel: (die Funktion jede Minute laufen)

var cron = require('node-cron'); 

cron.schedule('* * * * *', function(){ 
    myFunction(); 
}); 

Wie oben der Funktion myFunction erwähnt() läuft jedes Mal über die Knoten-cron-Bibliothek. Die Variablen innerhalb dieser Funktion scheinen jedoch nicht bei jeder Ausführung der geplanten Cron-Task aus dem Speicher freigegeben zu werden.

Irgendwelche Ideen?

Danke!

+1

Ich würde vermuten, dass es die Art ist, wie Sie Variablen in 'myFunction' referenzieren, anstatt etwas mit Knoten-Cron zu tun. Wenn Sie einen Code zur Verfügung stellen können, wie Sie Variablen in der Funktion verwenden, wird es einfacher für Menschen zu beantworten – Matt

Antwort

1

Wie empfiehlt es sich, alles aus dem Speicher freizugeben, damit die alten Daten nicht bei jeder Ausführung der Aufgabe gespeichert werden?

Es gibt keine solche Konvention oder Funktion in Javascript, um alle Variablen freizugeben.

Wenn Sie Variablen innerhalb eines Funktions- oder Blockbereichs ordnungsgemäß deklarieren, werden diese Variablen nur überleben, solange dieser Bereich aktiv ist. Wenn Sie Ihre Variablen nicht ordnungsgemäß mit const, let oder var deklarieren, können sie zu zufälligen globalen Variablen werden und sie werden für die Dauer der gesamten Anwendung leben.

Machen Sie es wie folgt aus:

function myFunction() { 
    // declare variables to be local to your function 
    let x = 2; 

    // bunch of other code that uses x 

} 

Dann wird jedes Mal myFunction() ausgeführt wird, wird es eine neue Version von x sein, die nichts mit der früheren Version von x und Javascript Garbage Collection wird aufzuräumen zu tun hat die älteren Versionen, die nicht mehr verwendet werden.

Wenn Sie genauere Hilfe zu Ihrem Code benötigen, zeigen Sie uns den Code, der die Variablen verwendet, mit denen Sie Probleme haben.


Wenn Sie es wie folgt tun:

function myFunction() { 
    // declare variables to be local to your function 
    x = 2; 

    // bunch of other code that uses x 

} 

Dann x wird eine versehentliche globale Variable und das gleiche x Variable wird in allen Aufrufen von myFunction() verwendet werden. Dies ist ein Anti-Muster in Javascript und in der Tat, Javascript hat jetzt strict Modus, der sogar macht einen Fehler, weil wie böse es ist.Absichtliche globale Variablen sollten explizit als global deklariert werden. Alle anderen Variablen sollten absichtlich in der entsprechenden Funktion oder im Blockbereich mit const, let oder var deklariert werden.

+0

@jremi - Wenn dies Ihre Frage beantwortet, dann geben Sie dies bitte der Gemeinde an, indem Sie auf das grüne Häkchen links neben klicken die Antwort und beendete damit diese Frage. Dadurch erhalten Sie auch einige Reputationspunkte, wenn Sie die hier beschriebenen Schritte zum Stack-Überlauf befolgen. – jfriend00

0

Wie Jfriend00 sagte, ich muss eine Funktion verwendet haben, die Variablen hatte, die versehentlich global ging. Am Ende habe ich ein Refactoring durchgeführt und konnte das Problem lösen. Jetzt funktioniert der Service großartig. danke

Verwandte Themen