【问题标题】:Async series with node-mysql output to array带有 node-mysql 输出到数组的异步系列
【发布时间】:2015-11-24 09:42:10
【问题描述】:

我想将 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

【问题讨论】:

    标签: javascript node.js asynchronous node-mysql


    【解决方案1】:

    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
    },
    // ...
    

    【讨论】:

    • 感谢 KeatsPeeks。我的错 。我会接受这个作为答案。
    猜你喜欢
    • 2020-06-15
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多