带有 node-mysql 输出到数组的异步系列
Async series with node-mysql output to array
我想将 mysql 查询的结果存储在数组 (docAutocomplete) 中,在所有查询完成后我想查看最终数组。为此,我正在使用异步系列。问题是数组没有打印任何东西,因为它看起来在函数(错误,结果)中没有任何数据。
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
是异步的,所以第一次回调是在查询完成之前调用的。你应该只在 suery 终止时调用你的第一个回调,如下所示:
// ...
function(callback) {
connection.connect();
connection.query('select x from a; select b from a', function(err, rows, fields) {
// ...
callback(null, 'one'); // HERE
});
// NOT HERE
},
// ...
我想将 mysql 查询的结果存储在数组 (docAutocomplete) 中,在所有查询完成后我想查看最终数组。为此,我正在使用异步系列。问题是数组没有打印任何东西,因为它看起来在函数(错误,结果)中没有任何数据。
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
是异步的,所以第一次回调是在查询完成之前调用的。你应该只在 suery 终止时调用你的第一个回调,如下所示:
// ...
function(callback) {
connection.connect();
connection.query('select x from a; select b from a', function(err, rows, fields) {
// ...
callback(null, 'one'); // HERE
});
// NOT HERE
},
// ...