2013-06-27 22 views
1

有人可以解釋爲什麼我無法將行Object傳遞給Clubs變量嗎?將對象指定給node.js中的變量

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : '', 
    database : 'test' 
}); 
var competition_feed = 'England'; 
var season_id = 2014; 
var clubs = {}; 

connection.connect(); 

connection.query('SELECT * FROM clubs WHERE competition_feed=\''+competition_feed+'\' AND season_id='+season_id+';', function(err, rows, fields) { 
    if (err) throw err; 
    clubs = rows; 
}); 

console.log(clubs); 

connection.end(); 

看來我錯過了一些關於變量和範圍的東西。請幫助:)

回答

1

可以,這不工作的原因是因爲

connection.query(.....) 

是異步的。所以俱樂部在事件循環之後才被設置爲行。很多嘗試使用它之後。達到所需行爲的一種方法如下:

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : '', 
    database : 'test' 
}); 
var competition_feed = 'England'; 
var season_id = 2014; 
var clubs = {}; 

connection.connect(); 

connection.query('SELECT * FROM clubs WHERE competition_feed=\''+competition_feed+'\' AND season_id='+season_id+';', function(err, rows, fields) { 
    if (err) throw err; 
    clubs = rows; 
    logClubs(); 
}); 

function logClubs() { 
    console.log(clubs); 
} 


connection.end(); 
+0

認爲它與'異步'(如果這是一個詞)有關,但無法弄清楚如何正確實現這種行爲。謝謝:) – octavian

1

clubs = rows是異步執行的。如果您在clubs = rows之前放置了console.log,您將會看到它實際上是在執行代碼後實際執行的。

+0

擊敗你21秒:) – ChrisCM

+0

恭喜! :(儘管我 –

相關問題