Javascript Node.js中的多个依赖SQL查询

Javascript Node.js中的多个依赖SQL查询,javascript,node.js,Javascript,Node.js,我正在尝试构建一个应用程序,它要求我对每个视图/控制器进行多个查询 我试图使用嵌套结构异步执行此操作,但sql结果在内部闭包中没有定义 这是我用来做这件事的函数: var conn = db.config(mysql); function run_queries(conn,callback) { conn.query(sql1, var1, function(err, res1) { if(err){ callback(err); return; }

我正在尝试构建一个应用程序,它要求我对每个视图/控制器进行多个查询

我试图使用嵌套结构异步执行此操作,但sql结果在内部闭包中没有定义

这是我用来做这件事的函数:

var conn = db.config(mysql);

function run_queries(conn,callback) {

    conn.query(sql1, var1, function(err, res1) {

        if(err){ callback(err); return; }

        console.log(res1);     // RETURNS SUCCESSFULLY!

        conn.query(sql2, var2, function(err, res2) {

            if(err){ callback(err); return; }

            console.log(res2); // UNDEFINED :(

            callback(null, res2);

        });

    });

}

run_queries(conn,function(err, result){

    console.log(result);       // UNDEFINED :(

});
我已经检查了我的SQL,它没有错误。如果我将sq1与sq2交换,外部闭包将返回对sq2的正确查询


内部闭包只是不返回查询

Async对于异步调用非常有用。您可以使用异步模块使代码得到良好的维护

使用
async.parallel

var conn = db.config(mysql);
var async = require('async');

function run_queries(conn, cb) {


    async.parallel({

      res1: function (cb) {

        conn.query(sql1, var1, function (err, res1) {
          if (err) { cb(err) }
          else { cb(null, res1) }
        })
      },
      res2: function (cb) {

        conn.query(sql2, var2, function (err, res2) {
          if (err) { cb(err) }
          else { cb(null, res2) }
        })
      }
    },
    function (err, result) {
      if (err) { cb(err) }
      else { cb(null, result) }
    })

}

run_queries(conn, function (err, result) {
  console.log(result);       // UNDEFINED :(
  // GET OBJECT OF res1 AND res2
});

为什么不使用异步模块?我对node是新手,不知道如何应用它。在这种情况下,理解异步非常重要。我将使用async.parallel并为您提供示例。非常感谢。我使用了async来解析post数据,但没有进一步研究该模块。你下面的回答很有帮助。非常感谢。出于好奇和学习的目的,为什么您认为我上面的代码在nodeJs的内部closure?异步特性中返回未定义。您可以尝试使用setTimeout(function(){\\your conn.query code},0)吗?这很有效,而且结构更简单,因此我可以为任意数量的查询创建一个函数。非常感谢。