我在回调中修改全局变量时遇到了问题。
我需要每小时从文件重新加载数据。如果我使用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)
。
我的问题是虽然在MY_GLOBAL
回调中设置了readFile
,但它在路由器中没有更新。我需要每小时访问更新的数据。
答案 0 :(得分:0)
我可以建议几件事情来检查。
首先,我会使用console.log
或alert
仔细检查回调函数是否正在执行。
我还想指出,对象是通过Javascript中的引用传递的,这意味着传递给router
的对象是对MY_GLOBAL
的引用,而不是MY_GLOBAL
的副本}。这可能出错的地方是你在哪里重新分配了MY_GLOBAL。我会确保你没有在任何地方重新分配MY_GLOBAL。
此外,如果data
是一个对象(而不是字符串,数字或布尔值),则需要检查它是否也没有被重新分配。例如,如果您在router
内读取MY_GLOBAL.some_name的值,则可能在data
分配给MY_GLOBAL.some_name后保留对旧版本的引用。
答案 1 :(得分:0)
如果是全局声明,为什么不尝试使用module
关键字,很多人会使用window
。
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