【发布时间】:2018-09-18 02:17:51
【问题描述】:
我正在尝试编写一个模块,它根据传递给函数的键从 MySQL 数据库返回一个值。
以下代码在独立测试时工作正常,我能够返回结果,但是当我尝试从函数调用中获取结果时,我得到了未定义的结果。
var value = getKey("tc_api_user_key");
我怀疑这是由于返回语句。我应该如何让调用函数等待结果。
var mysql = require('promise-mysql')
, dbConnect = require('../connection.js')
, fs = require('fs')
, select = fs.readFileSync(__dirname + '/queries/getallkey.sql').toString();
let getKey = (key_id) => {
mysql.createConnection(dbConnect.getConnection()).then(function(conn){
var result = conn.query(select);
conn.end();
return result;
}).then(function(rows){
// Logs out a list of hobbits
Object.keys(rows).forEach(function(key) {
var item = rows[key];
if (key_id == item.key_id) {
return item.key_value;
}
});
});
}
var value = getKey("tc_api_user_key");
console.log(value)
这个问题与 conn.query() 无关,如果使用了 console.out 结果,该函数按预期工作,它只是在函数调用中不可用。可能是由于调用的异步性质。
【问题讨论】:
-
您的
conn.query()调用是异步的。您需要向它传递一个回调并在其中处理响应。
标签: javascript mysql node.js callback promise