正确使用回调等待查询完成

时间:2017-01-10 23:07:30

标签: mysql node.js express callback

我正在尝试创建一个可重用的代码来查询数据库(带有一些参数),然后对这些数据执行操作并返回一些新创建的数据。我大概看起来像这样:

function loadList(config) {
    var list = [];

    var queryString = "SOME QUERY STRING BASED ON THE config PARAMETER";

    connection.query(queryString, function (err, result) {
        if err throw err;

        for (var i = 0; i < result.length; i++) {
            //Perform some action on the data
            //IMPORTANT this changes the list variable
        }
    });

    return list;
}

现在,这段代码不起作用,该函数几乎在每种情况下都会返回[]。这是因为return list在查询回调运行之前很久就被执行了。但是,我无法为上帝之爱弄清楚如何构建我的代码,函数的return list在查询和回调之后运行 ave被执行了。可能是因为我累了,但我真的看不到它的解决方案。

我曾想过在查询中调用loadList()内的新回调函数,但是如果我从该回调中调用return list,它只会返回list回调,而不是父函数。

实现此目的的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您应该使用回调基本函数,如下所示:

function loadList(config, callback) {

    // check that callback is not null
    callback = callback || function() {};

    var list = [];

    var queryString = "SOME QUERY STRING BASED ON THE config PARAMETER";

    connection.query(queryString, function(err, result) {
        if (err) {
            return callback(err);
        }

        for (var i = 0; i < result.length; i++) {}

        // after you done your work call the call back
        return callback(null, list);
    });
}

用法:

loadList(config_here, function(err, list) {
    if (err) {
        // do something with err
    }

    // here you have the list
})