mysql包装函数有问题

时间:2011-07-24 16:39:49

标签: mysql node.js

我第一次玩Node.JS应用程序,到目前为止我很喜欢它,但我遇到了问题......

我在client.query函数上编写了一个包装器函数,它只允许我传递一个参数,它从一组允许的查询中获取查询......

    var runProcedure = function(proc, vars){
    var params;
    if(typeof vars != 'undefined'){
      params.concat(eval('(' + vars + ')'));
    }

    this._client.query(queries[proc], params, function(err, results, fields){
        if(err) { throw err; }
        if(results){
            return(results);
        }else{
            return "No data found.";
        }
    });
}

该函数正常工作,如果我调试console.log结果,我想要的数据就在那里..但是,它没有返回到我调用的地方......

    var data = runProcedure(procedureName, parameters);
    console.log(data); // undefined

在排除故障时,似乎异步运行查询功能....但这会给我带来很大的问题。从http请求处理程序中调用runProcedure函数。所以我需要能够访问响应变量。我想我可以将它作为参数一直传递下来......但这看起来很笨拙。处理这个问题的最佳代码模式是什么?我应该将响应设置为全局变量吗?我可以同步运行mysql吗?

干杯,

whiteatom

1 个答案:

答案 0 :(得分:0)

只需将您的数据传递给回调,而不是使用return

返回
var runProcedure = function(proc, vars, callback) {

    var params;
    if(typeof vars != 'undefined'){
      params.concat(eval('(' + vars + ')'));
    }

    this._client.query(queries[proc], params, function(err, results, fields){
        if(err) { throw err; }
        if(results){
           callback(results);
        }else{
           callback('No data found.');
        }
    });

}

现在在http请求处理程序中:

// ...
function httpRequestHandler(req, resp)
{
    //...
    runProcedure(proc, vars, function(dbResp) {
        if (dbResp === 'No data found.')
        {
            // handle error
        } else {
            // do something with result
        }     
    })
}