我在 db.js 中有一段代码片段,如下所示,
exports.asyncGetAllData = function () {
connection.connect(function(err) {
connection.query(sqlGetAllData, function (err, result) {
if (err) reject(err);
else
{
//console.log(result);
}
});
});
};
我想在 app.js 中调用该函数时获取结果数据,如下所示。
app.get('/test/getPriceTrend', function(req, res) {
console.log('SERVER::getPriceTrend');
console.log(req.url);
var data = db_connection.asyncGetAllData(); //data is undefined
console.log(data);
res.setHeader('Accept', 'application/json');
res.writeHead(res.statusCode);
//The following piece of code will send information from the database
res.write(JSON.stringify({"hello":"world"}));
res.end();
});
正如您所看到的,当我尝试从db.js获取数据时,它会在控制台窗口中显示"数据未定义"。我该如何解决这个问题?有什么建议吗?
提前致谢,
答案 0 :(得分:2)
看起来您正在使用异步方法调用数据而不是等待响应。
var data = db_connection.asyncGetAllData(); //data is undefined
console.log(data);
使用能够获得SyncData的函数或使用回调函数,如下所示:
exports.asyncGetAllData = function (cb) {
connection.connect(function(err) {
connection.query(sqlGetAllData, function (err, result) {
if (err) reject(err);
else
{
//console.log(result);
cb(data);
}
});
});
};
var data = db_connection.asyncGetAllData(function(data) {
console.log(data);
res.write(JSON.stringify(data));
res.end();
});
答案 1 :(得分:1)
最简单的方法是创建一个传递给asyncGetAllData()
的回调函数
你的功能看起来更像是这样:
exports.asyncGetAllData = function (callback) {
connection.connect(function(err) {
connection.query(sqlGetAllData, callback)
})
}
然后在你app.js
中传递回调:
db_connection.asyncGetAllData(function(err, result{
if (err) reject(err);
else
{
//console.log(result);
}
})
您还可以调整asyncGetAllData
以返回承诺,这可能会让事情变得更漂亮。