Javascript Node.js中的多个依赖SQL查询
我正在尝试构建一个应用程序,它要求我对每个视图/控制器进行多个查询 我试图使用嵌套结构异步执行此操作,但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; }
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)吗?这很有效,而且结构更简单,因此我可以为任意数量的查询创建一个函数。非常感谢。