2013-06-27 4 views
1

누군가 내가 club 변수에 Row 객체를 전달할 수없는 이유를 설명 할 수 있습니까?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(); 

변수 및 범위에 대해 빠뜨린 것 같습니다. 제발 도와주세요 :)

connection.query(.....) 

비동기이기 때문에

답변

1

당신이 할 수있는이 작동하지 않는 이유입니다. 따라서 클럽은 이벤트 루프의 뒷부분까지는 행을 설정하지 않습니다. 당신이 그것을 사용하려고하면 얼마 후.

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

축하해! :(나를 위해 비록 –