节点JS并行数据库调用

时间:2015-11-28 17:50:48

标签: javascript mysql node.js asynchronous

我有一段代码需要创建一个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块外部访问它时,它是未定义的。

0 个答案:

没有答案