NodeJS MySQL concat查询,具有多个模型查询对一个控制器调用的响应
我在理解nodejs上的异步方法时遇到问题 我的控制器中有以下代码片段:NodeJS MySQL concat查询,具有多个模型查询对一个控制器调用的响应,mysql,node.js,asynchronous,Mysql,Node.js,Asynchronous,我在理解nodejs上的异步方法时遇到问题 我的控制器中有以下代码片段: app.get(basePath, function (req, res, next) { model.generateDB(function (modelErr, modelRes) { if (modelErr) console.log('Error: ' + modelErr); next(res.send(modelRes)); }
app.get(basePath, function (req, res, next) {
model.generateDB(function (modelErr, modelRes) {
if (modelErr) console.log('Error: ' + modelErr);
next(res.send(modelRes));
});
});
此模型的代码片段:
generateDB: function (next) {
BDManager.query(
'INSERT INTO tableName' +
'(field1, field2) VALUES ("a", "b")',
function (err, res) {
next(err, res);
});
}
以及数据库管理器的这段代码
query: function (sql, next) {
var con = mysql.createConnection(config.MySQL);
con.query(sql, function (err, res) {
if (err) next(err, null);
next(null, res);
});
con.end();
}
这对我来说很好。问题是,在模型中,我怎么可能有多个查询,它们是只有一个控制器调用的响应,如示例(不起作用):
这个想法可能是获取一系列错误和响应,但我不知道在所有查询完成后如何发送它。我尝试了使用.then,但似乎不起作用(我使用.then得到的错误是“不能在null上使用then”)
另一个解决方案可能是在一个查询中包含多个查询,但我尝试使用“;”分隔符,但对我不起作用。所以这是使用回调(.then是用于承诺)。您可以在它周围创建一个promise包装器,让您承诺它,然后您可以等待它们或使用promise.all,如果您想并行运行它们的话 例如:
函数promiseQuery(查询,参数){
返回新承诺((解决、拒绝)=>{
查询(查询,参数,函数(err,res){
如果(错误)返回拒绝(错误);
返回解析(res);
});
});
}
让我们等待承诺([
承诺查询(查询1,参数1),
承诺查询(查询2,参数2),
承诺查询(查询3,参数3),
]);代码>所以我混合了这些概念。非常感谢,这对我很有帮助。
BDManager.query(
'INSERT INTO tableName' +
'(field1, field2) VALUES ("a", "b")',
function (err, res) {
next(err, res);
});
BDManager.query(
'INSERT INTO tableName' +
'(field1, field2) VALUES ("a", "b")',
function (err, res) {
next(err, res);
});
BDManager.query(
'INSERT INTO tableName' +
'(field1, field2) VALUES ("a", "b")',
function (err, res) {
next(err, res);
});