【发布时间】:2017-11-12 17:12:32
【问题描述】:
我正在尝试使用 2 个参数对我的数据库进行简单查询,但在尝试使用 Promises/Async 重新格式化此代码以避免回调地狱时遇到了麻烦。代码如下:
module.exports = {
getDailyRaw: function(school, meal, callback) {
var sql = "SELECT * FROM daily WHERE school = ? AND meal = ?";
pool.getConnection(function(err, conn) {
if(err) { console.log(err); callback(true); return; }
conn.query(sql, [school, meal], function(err, results) {
conn.release();
if(err) { console.log(err); callback(true); return; }
callback(false, school, results);
})
})
}, ....
我一直在尝试查找有关解决此问题的教程,但无法正确实施/理解它们。
编辑:我现在正在使用“promise-mysql”库来完成工作,但我仍然无法将多个查询链接在一起。我如何将已经建立的连接传递给另一个 then 语句,以便我可以再次调用查询? 更新代码:
getDaily: function(school, meal, callback) {
pool.getConnection().then(function(conn) {
var sql = "SELECT * FROM daily WHERE school = ? AND meal = ?";
return conn.query(sql, [school,meal]);
}).then(function(rows) {
var qMarks = "";
var foodNames = [school];
rows.forEach(function(item) {
foodNames.push(item.name);
qMarks += "?,";
});
qMarks = qMarks.substring(0, qMarks.length - 1);
var sql = "SELECT * FROM foods WHERE school = ? AND name IN (" + qMarks + ")";
return conn.query(sql, foodNames);
}).then(function(finalData) {
callback(finalData);
}).catch(function(err) {
callback(null);
console.log(err);
})
},
【问题讨论】:
-
您在 node.js 中使用了哪个确切的 mysql 模块?是node-mysql吗?
-
包名看起来只是'mysql',但我不确定它是否与node-mysql相同。
-
或许可以使用promise-mysql:npmjs.com/package/promise-mysql
-
感谢您的建议!但是,请参阅更新的代码以了解出现的新问题。
标签: mysql node.js asynchronous callback promise