我正在尝试构建一个字典以便稍后在我的代码中使用。例如,我想在启动时生成字典,并想在一小时后覆盖它。
为此,我编写了以下代码:
var database = require('mysql');
var sleep = require('sleep');
var config = require('./config.json');
var list = [];
function getValues(callback){
var con = database.createConnection(config.database.connection);
con.connect();
var query = "SELECT * FROM MODELS WHERE STATUS = 'Active'";
con.query(query, function (err, result) {
if (err) throw err;
callback(result);
});
con.end();
}
list = getValues();
console.log(list);
while(true){
list.forEach(function(item) {
console.log(item.name);
}).
sleep.sleep(config.general.interval);
list = getValues();
console.log(list);
}
结果是 list
保持 undefined
,例如在 while 循环 console.log 回显之前: undefined
和在 while-循环我得到以下堆栈跟踪:
/test.js:20
list.forEach(function(item) {
^
TypeError: Cannot read property 'forEach' of undefined
at Object.<anonymous> (/Users/nduijvelshoff/Development/Node.js/DataHandler/test.js:20:10)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
我必须在哪里做一些不同的事情?我尝试查找它并发现 .query 例如是异步的,但找不到如何处理它。
最佳答案
您没有使用在 getValues
函数中定义的callback
使用方法如下
var database = require('mysql')
var sleep = require('sleep')
var config = require('./config.json')
var list = []
function getValues (callback) {
var con = database.createConnection(config.database.connection)
con.connect()
var query = 'SELECT * FROM MODELS WHERE STATUS = \'Active\''
con.query(query, function (err, result) {
if (err) throw err
// list object is set here
list = result;
callback(result)
})
con.end()
}
// this will set list object
getValues()
setInterval(function(){
//Overwrite logic for list
},config.general.interval)
关于javascript - 通过 Node.js 中的函数将数据库结果保存在 Dictionary 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47368584/