2013-02-22 81 views
0

node-mysql query返回undefined當我調用方法時,查詢返回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); 

而且沒有更迭:\ 誰能幫我解決這個問題?非常感謝你們!

回答

3

的Node.js是異步的,你的代碼Hash.prototype.GetHash = function() {}將無法​​正常工作,因爲它立即返回值調用時,但一直沒有執行它至今。所以當你打印測試時,它會給出未定義的。

要使用您的函數計算並且您試圖返回的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
+0

人!非常感謝:)你是上帝 – Chipso 2013-02-22 16:27:55