2017-03-16 11 views
-1

質問が正しいとは限りませんが、基本的には、npmパッケージノードcron(https://www.npmjs.com/package/node-cron)を使用してノードjsアプリケーション内のすべての変数をリセットする、 。Nodejsを使用してメモリ内のすべての変数をリセットする方法

しかし、これは私のアレイでのみ起こっていると思います。

パッケージはうまくいきます...私の機能はスケジュールされた間隔で実行されていますが、実行するたびに以前のスケジュールされたタスク変数をメモリから解放しません。本質的には、各反復が最後に追加されているようです。

メモリからすべてを解放して、タスクが実行されるたびに古いデータを保持しないようにするベストプラクティスは何ですか?

例: (機能毎分実行)

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

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

機能MyFunctionを上述したように()実行するたびにノードクーロン・ライブラリを介し。ただし、この関数内の変数は、スケジュールされたcronタスクの実行ごとにメモリから解放されないように見えます。

アイデア?

ありがとうございます!

+1

私はnode-cronとは関係なく、あなたが 'myFunction'で変数を参照していると思います。関数内で変数をどのように使用しているかのコードを提供できれば、人々が – Matt

答えて

1

メモリからすべてを解放して、タスクが実行されるたびに古いデータを保持しないようにするベストプラクティスは何ですか?

すべての変数を解放するためのJavascriptでは、このような規則や機能はありません。

関数またはブロックスコープ内で変数を正しく宣言すると、それらの変数はそのスコープが有効である限り生き残ります。 constlet、またはvarで変数を正しく宣言しないと、それらは偶然のグローバル変数になり、アプリケーション全体の間存続します。

はこのようにそれを実行します。

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

    // bunch of other code that uses x 

} 

その後、myFunction()が実行されるたびに、クリーンアップされますxとJavaScriptガベージコレクションの以前のバージョンとは関係ありませんxの新しいバージョンが存在します古いバージョンはもはや使用されていません。

あなたのコードについてさらに詳しいヘルプが必要な場合は、問題のある変数を使用するコードを表示してください。


あなたはこのようにそれを行う場合:

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

    // bunch of other code that uses x 

} 

その後、xは偶然のグローバル変数になり、同じx変数はmyFunction()のすべての呼び出しに使用されます。これはJavascriptのアンチパターンであり、実際にはJavascriptにはstrictというモードがあり、これは悪いためにエラーになります。意図的なグローバル変数は、グローバルとして明示的に宣言する必要があります。他のすべての変数は、const,letまたはvarの適切な関数またはブロックスコープ内で意図的に宣言する必要があります。

+0

@jremiに簡単に回答できるようになります - これがあなたの質問に答えた場合は、左側の緑のチェックマークをクリックしてコミュニティに示してくださいこの答えを終え、この質問を終えました。これはまた、ここで適切な手順をスタックオーバーフローで実行したことでいくつかの評判ポイントを獲得します。 – jfriend00

0

jfriend00は、偶発的にグローバル化した変数を持つ関数を使用していたに違いないと言いました。私はいくつかのリファクタリングをやり直すことになり、解決することができました。今はサービスがうまく動作しています。ありがとうございました

関連する問題