[英]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.log
或alert
再次检查回调函数是否正在执行。
我还想指出的是,对象是通过引用在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.