2012-12-02 2 views
0

나는 자바 스크립트를 잘 모른다. 전역 변수를 정의 할 수 없습니다.node.js 문제가있는 글로벌 변수

var data = 'empty'; 

connection.query('SELECT * FROM deneme',function(err, rows, fields){ 
    if (err) throw err; 
    data = rows; 
}); 

console.log(data); 

일반적으로, 콘솔은 행 반환해야 '데이터를하지만, 그것은 반환' '빈. 어떻게 함수 내부에서 행을 쿼리 할 수 ​​있습니까? 전역 변수는 어떻게 정의 할 수 있습니까?

+2

. 그건 불가능하다. 나는 비유를 썼다. 어쩌면 그것을 이해하는 데 도움이 될 것이다. http://stackoverflow.com/a/11689804/938089 –

답변

1

console.log이 비동기 코드 블록 밖에 있기 때문에 작동하지 않는 이유가 있습니다. 기본적으로 어떤 일이 발생합니까 :

  1. dataempty으로 설정됩니다.
  2. connection은 데이터베이스 요청을 발행합니다.
  3. console.log 화재 (이 시점에서 dataempty 임);
  4. 데이터베이스 응답을 받았습니다.
  5. 콜백 화재;
  6. datarows으로 설정됩니다.

그래서 당신은 단순히 원하는 비동기 블록 코드 내부에 console.log 문을 넣어 무엇을 얻기 위하여 : 이것은 전역 변수 정의의 문제가 아니라 동기 방식 비동기 방법을 사용하려고

var data = 'empty'; 

connection.query('SELECT * FROM deneme',function(err, rows, fields){ 
    if (err) throw err; 
    data = rows; 
    console.log(data); 
}); 
+1

좋아,하지만 함수의 외부에서 데이터를 사용해야 할 것이다. 주요 질문은 .. – user1870012

+0

어떻게 u 값을 돌려 주겠습니까? –

+0

할 수 없습니다. 그건 비동기식 프로그래밍을하는 방식이 아닙니다. – freakish