Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 正确使用回调等待查询完成_Mysql_Node.js_Express_Callback - Fatal编程技术网

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

Mysql 正确使用回调等待查询完成,mysql,node.js,express,callback,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) {

我试图制作一段可重用的代码,用于查询数据库(带有一些参数),然后对这些数据执行操作并返回一些新创建的数据。我得到的大致情况如下:

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;
}
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);
    });
}
函数加载列表(配置){
var列表=[];
var queryString=“基于配置参数的一些查询字符串”;
查询(查询字符串,函数(错误,结果){
如果犯了错误,就扔出错误;
对于(变量i=0;i
现在,这段代码不起作用,该函数在几乎所有情况下都将返回
[]
。这是因为
返回列表
早在查询回调运行之前就执行了。然而,看在上帝的份上,我不知道如何构造父函数的
返回列表
在执行查询和回调之后运行的代码。可能是因为我累了,但我真的看不出解决办法

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


正确的实现方法是什么?

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

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;
}
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);
    });
}

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

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;
}
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);
    });
}

好的,谢谢你的提示。这个回调基函数大致是什么样子的?类似于函数coolCallback(err,list){//code here}
?将
err
传递给回调函数背后的想法是什么?编辑:你的编辑让它变得清晰!谢谢在模块中,最好给模块的调用者提供
err
,该函数决定如何处理错误、
抛出它、
打印它等等。我面临同样的问题,但不明白为什么在返回回调中使用“null”作为第一个参数(null,list);好的,谢谢你的提示。这个回调基函数大致是什么样子的?类似于函数coolCallback(err,list){//code here}
?将
err
传递给回调函数背后的想法是什么?编辑:你的编辑让它变得清晰!谢谢在模块中,最好给模块的调用者提供
err
,该函数决定如何处理错误、
抛出它、
打印它等等。我面临同样的问题,但不明白为什么在返回回调中使用“null”作为第一个参数(null,list);