繁体   English   中英

修改和传递全局变量

[英]Modifying and passing global variables

我在修改回调中的全局变量时遇到问题。

我需要每小时从文件中重新加载数据。 如果我使用readFileSync可以正常工作,但是如果我使用普通的readFile

var MY_GLOBAL = {};

fs.readFile("some_path", function (err, data) {
    if (err) throw err;
    MY_GLOBAL.some_name = data;
    });

setInterval(function() {
    fs.readFile("some_path", function (err, data) {
        if (err) throw err;
        MY_GLOBAL.some_name = data;
        }
    }, 60 * 60 * 60 * 1000);

我还有一个名为router.js模块,其中包含应用程序的所有路由。

我称它为: router(app, MY_GLOBAL)

我的问题是,尽管在readFile回调中设置了MY_GLOBAL ,但它并未在路由器中更新。 我需要每小时访问一次更新的数据。

我可以建议检查几件事。

首先,我将使用console.logalert再次检查回调函数是否正在执行。

我还想指出的是,对象是通过引用在Javascript中通过,这意味着传入的对象router是一个参考MY_GLOBAL ,不是副本MY_GLOBAL 如果您在某处重新分配了MY_GLOBAL,这可能会出错。 我会确保您没有在任何地方重新分配MY_GLOBAL。

另外,如果data是一个对象(与字符串,数字或布尔值相对),则需要检查它是否也没有被重新分配。 例如,如果您在router内部读取MY_GLOBAL.some_name的值,则可能在将data分配给MY_GLOBAL.some_name之后可以保留对旧版本的引用。

如果它是一个全局语句,为什么不尝试使用module关键字,那么很多人会使用window

另一件事。 您希望功能代码每小时执行一次。 您要在第二个参数中再增加一个60乘法。 尝试这个。

module.MY_GLOBAL = {};

var callbackFunction = function(){
  fs.readFile("some_path", function (err, data) {
    if (err) throw err;
    module.MY_GLOBAL.some_name = data;
  }
};
callbackFunction();
setInterval(callbackFunction , 60 * 60 * 1000); // 360000 == 1 hour

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM