我有一段代码需要创建一个MySQL连接并在不同的表上激活3个查询。我尝试使用异步瀑布(用于创建连接并传递给查询执行)和并行(用于触发查询)的组合。但是,我的智慧结束了如何在单个json中收集输出。
电话如下:
var finalJson = {};
async.waterfall([
function(callback){
var connection = dbModel.init();
callback(null, connection);
},
function(connection, callback){
async.parallel([
function(callback){
dbModel.fetchA(connection, combineJson);
},
function(callback){
dbModel.fetchB(connection, combineJson);
},
function(callback){
dbModel.fetchC(connection, combineJson);
}
]);
callback();
}
], function (err, result) {
});
function combineJson(obj){
for(var key in obj){
finalJson[key] = obj[key];
}
console.log(finalJson);
return finalJson;
}
fetch函数如下所示:
var fetchA = function(connection, callback){
connection.query('SELECT * from A limit 1', function(err, rows, fields) {
if(err) throw err;
callback(rows[0]);
});
}
combineJson
函数能够console.log
finalJson
变量,但是当我从async.parallel
块外部访问它时,它是未定义的。