NodeJS MySQL concat查询,具有多个模型查询对一个控制器调用的响应

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)); }

我在理解nodejs上的异步方法时遇到问题

我的控制器中有以下代码片段:

 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); 
});