javascript - 通过 Node.js 中的函数将数据库结果保存在 Dictionary 中

标签 javascript mysql node.js dictionary

我正在尝试构建一个字典以便稍后在我的代码中使用。例如,我想在启动时生成字典,并想在一小时后覆盖它。

为此,我编写了以下代码:

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/

相关文章:

javascript - Chrome 打包应用程序无法打开同一窗口错误

javascript - 使用序列训练神经网络(当前未收敛)

c# - 如何防止重复的数据值出现在 MySQL 数据库中

MySql如何在if语句中联合2个查询

node.js - 获取 VSCode 扩展 : node-fetch and node:http issues

javascript - 修改 res 而不改变参数

javascript - 如何在 jquery 中使用 php 数组

javascript - jQuery - 比较两个值并显示或隐藏 div

MYSQL:需要帮助快速增长表和降低速度(4mio 行)

javascript - Sails.js 服务器不再启动