2013-08-28 2 views
3

fs.readfile의 내용을 readfile 메소드의 범위 밖으로 전달하고 비슷한 변수에 저장할 수 있는지 궁금합니다.fs.readfile의 결과를 변수에 저장하고 전역 변수로 전달

var a; 

function b() { 
    var c = "from scope of b"; 
    a = c; 
} 
b(); 

그럼 console.log (a); 또는 다른 변수로 전달하십시오.

제 질문은 콘텐츠 (데이터)가 글로벌 변수 global_data로 전달되도록 fs.readFile을 사용하여이 작업을 수행하는 방법입니다.

var fs = require("fs"); 

var global_data; 

fs.readFile("example.txt", "UTF8", function(err, data) { 
    if (err) { throw err }; 
    global_data = data; 
}); 

console.log(global_data); // undefined 

감사

+0

환영 할 것입니다! 너는 그렇게 할 수 없다. – SLaks

답변

12

당신이 가진 문제는 범위하지만, 작업 순서의 문제가 아니다.

readFile은 비동기이므로 읽기 전과 global_data = data; 행이 실행되기 전에 console.log(global_data);이 발생합니다. 간단한 프로그램 (일반적으로하지 웹 서버), 당신은 또한 동기 운전 readFileSync을 사용할 수 있습니다에서

fs.readFile("example.txt", "UTF8", function(err, data) { 
    if (err) { throw err }; 
    global_data = data; 
    console.log(global_data); 
}); 

하지만 실행을 중지하지 일반적으로 바람직입니다 :

올바른 방법이있다.

readFileSync를 사용하면 ** 비동기 **의 놀라운 세계에

var global_data = fs.readFileSync("example.txt").toString(); 
+0

바로 데이터 변수 내용을 글로벌 global_data 변수에 전달할 수 있는지 궁금합니다. console.log (global_data)는 정의되지 않은 것으로 나타났습니다. – Paul

+0

내 대답을 이해하지 못했다고 생각합니다. 데이터 변수 내용을 글로벌 global_data 변수에 전달할 수 있습니다. 아무 문제가 없습니다. 그러나 문제는 변수를 채우기 전에 console.log를 실행한다는 것입니다. –

+0

좋습니다. 그래서 그것은 전체 비동기적인 것입니다. 하지만 readFileSync를 사용하는 것은 도움이되지 않습니다. console.log를 실행하기 전에 변수를 채울 수 있습니까? 나는 나의 질문이라고 생각한다. – Paul

관련 문제