多个sql语句嵌套查询

来源:互联网 发布:c语言不合理的地方 编辑:程序博客网 时间:2024/06/05 15:58
法一:
// 设置 connection连接
multipleStatements: true

//存储查询的sql语句的数组
let sqlArr = [];
//存储查询结果的对象
let resObj = {};
async.eachSeries(sqlArr, function(item, callback){
 db.query(item, function(err, rows){
  if(err){
   return callback(err);
  }
  resObj[item] = rows;
  callback(null);
 }));
},function(err) {
 if(err){
  return console.error(err)
 }
 //对结果进行处理...结果均在resObj中,key为sql语句,value为语句对应的sql执行结果
 console.log(resObj);
});

法二:
//首先你要把db.query封装成一个promise,如下:
//这部分代码你可以放到公共lib文件里面
function query(sql){
 return new Promise(function (resolve, reject){
  db.query(sql, function(err, rows){
   if(err)
    return reject(err);
   relsolve(rows);
  });
 });
}
//下面是主逻辑
//存储查询的sql语句的数组
let sqlArr = [];
//构造一个promiseArr存储所有的db查询promise对象
let promiseArr =sqlArr.map(item=>query(item));
//使用Promise.all方法执行;then中的dataArr即为查询的结果,顺序和sqlArr中的sql一致,处理逻辑可以放在这里;最后的catch是异常捕获,异常处理放在这里
Promise.all(promiseArr).then(dataArr=>console.log(dataArr)).catch(err=>console.error(err));