开发者问题收集

当我调用方法时,查询返回未定义

2013-02-22
1344

node-mysql query 返回 undefined

这是我的代码:

Hash.prototype.GetHash = function()
    {
        var test;
        var connection = this.config.CreateConnection();
        connection.connect(function(err){
           if (err)
               throw err;
           else
           {
               var query = "SELECT hash FROM test WHERE id = 1";
               connection.query(query, function(err, rows, result){
                  if (err)
                      throw err;
                  else
                  {
                      test = rows[0].hash;
                      console.log(test);
                  }
               });
               connection.end(function(err){
                   if (err)
                       throw err;
               });
           }
        });
        return test;
    }

console.log 将给我正确的结果 1a2b3c4d 。 因此。当我将此方法调用到主方法时:

    var h = hash.GetHash();
    console.log(h);

控制台给我结果 undefined

因此,我尝试强制转换、重新输入、从字符串类创建一个新对象: 此对象 test 例如:

var test = '';
var test = new String;
var test = new String(rows[0].hash);

但没有成功:\ 有人能帮我解决这个问题吗?非常感谢大家!

1个回答

Node.js 是异步的,您的代码 Hash.prototype.GetHash = function() { 将无法工作,因为它在调用时立即返回值,但尚未执行。因此,当您打印测试时,它会给出未定义。

要使用您的函数计算并尝试返回的 test ,您必须在函数完成后使用带有 test 作为参数的回调来使用它。您必须对函数进行一些更改。

Hash.prototype.GetHash = function(callback){
//pass callback in arguments if you want it to be provided when calling
...  //compute test
//return test; Dont do return, do callback
callback(test);
}

//Your definition of callback should be
callback = function(h){
console.log(h);
}

查看教程以了解更多信息:

  1. http://docs.nodejitsu.com/articles/getting-started/control-flow/how-to-write-asynchronous-code
  2. http://howtonode.org/control-flow
  3. http://howtonode.org/control-flow-part-ii
user568109
2013-02-22