与node-mysql输出到数组的asynchronous系列

我想从MySQL查询存储在一个数组(docAutocomplete)的结果,并在所有的查询完成后,我想看到最后一个数组。 我正在使用asynchronous系列为此目的。 问题是数组不打印任何东西,因为它看起来没有任何数据(函数,结果)。

var mysql = require('mysql'), async = require("async"); var connection = mysql.createConnection({ host: 'xx', user: 'xx', password: 'xx', database: 'xx' multipleStatements: true }); var docAutocomplete = []; async.series([ function(callback) { connection.connect(); connection.query('select x from a; select b from a', function(err, rows, fields) { if (err) throw err; for (var i = 0; i < rows[0].length; i++) { docAutocomplete.push({ " First Name": rows[0][i].x }) } for (var i; i < rows[1].length; i++) { docAutocomplete.push({ "Last Name": rows[1][i].b }) } }); callback(null, 'one'); }, function(callback) { connection.end(); callback(null, 'two'); } ], function(err, results) { console.log(results); console.log(JSON.stringify(docAutocomplete)); }); 

目前的产出如下图所示。

 [ 'one', 'two' ] [] // value of docAutocomplete array. Should have something here First Name and Last name 

connection.query是asynchronous的,因此在查询完成之前调用第一个callback函数。 只有当suery终止时,您才应该调用您的第一个callback函数,如下所示:

 // ... function(callback) { connection.connect(); connection.query('select x from a; select b from a', function(err, rows, fields) { // ... callback(null, 'one'); // HERE }); // NOT HERE }, // ...