【问题标题】:How to reset all variables in memory using Nodejs如何使用 Nodejs 重置内存中的所有变量
【发布时间】:2017-03-16 20:43:02
【问题描述】:

也许我的问题并不完全正确,但基本上,我需要知道使用 npm 包节点 cron (https://www.npmjs.com/package/node-cron) 在我的节点 js 应用程序中重置所有变量的最简单方法。

但是,我认为这只发生在我的数组中。

这个包很好用...我的函数在预定的时间间隔内运行,但每次运行它都不会从内存中释放以前的预定任务变量。从本质上讲,我似乎将每次迭代都添加到最后一次。

从内存中释放所有内容的最佳做法是什么,这样它就不会在每次任务运行时都保留旧数据。

示例: (每分钟运行一次函数)

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

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

如上所述,函数 myFunction() 每次都通过 node-cron 库运行。但是,每次运行计划的 cron 任务时,此函数中的变量似乎都不会从内存中释放。

有什么想法吗?

谢谢!

【问题讨论】:

  • 我猜这是您在myFunction 中引用变量的方式,而不是与node-cron 有关的方式。如果您可以提供一些有关如何在函数中使用变量的代码,那么人们会更容易帮助回答

标签: node.js npm cron-task


【解决方案1】:

从内存中释放所有内容的最佳做法是什么,这样它就不会在每次任务运行时都保留旧数据。

Javascript 中没有这样的约定或功能来释放所有变量。

如果您在函数或块作用域内正确声明变量,那么这些变量只有在该作用域存在时才会存在。如果您没有使用constletvar 正确声明您的变量,那么它们可能会成为意外的全局变量,并且它们将在整个应用程序的持续时间内存在。

这样做:

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

    // bunch of other code that uses x

}

然后,每次运行myFunction(),都会有一个新版本的x,与之前的x 版本无关,Javascript 垃圾回收会清理不再使用的旧版本正在使用中。

如果您需要有关代码的更具体帮助,请向我们展示使用您遇到问题的变量的代码。


如果你这样做:

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 模式,甚至因为它的邪恶程度而使其成为错误。有意的全局变量应显式声明为全局变量。所有其他变量应在适当的函数或块范围内有意声明为constletvar

【讨论】:

  • @jremi - 如果这回答了您的问题,请通过单击答案左侧的绿色复选标记向社区表明这一点,从而完成此问题。这也将为您在堆栈溢出时遵循正确的程序赢得一些声誉积分。
【解决方案2】:

正如 jfriend00 所说,我一定是在使用一个函数,该函数的变量意外变为全局变量。我最终做了一些重构重写并能够解决,现在服务运行良好。谢谢

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2015-12-15
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2020-04-16
    • 2015-08-14
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多