2013-08-28 21 views
3

我想知道是否可以将fs.readfile的内容传递到readfile方法的作用域之外,并将其存储在类似的变量中。将nodejs fs.readfile的结果存储在一个变量中并传递给全局变量

var a; 

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

然后我可以console.log(a);或者将它传递给另一个变量。

我的问题是有没有办法与fs.readFile做到这一点,以便内容(数据)传递给全局变量global_data。

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是异步的,因此console.log(global_data);发生在读取之前和执行global_data = data;行之前。

正确的做法是这样的:

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

在一个简单的程序(通常不是Web服务器),你可能还需要使用同步操作readFileSync但它通常最好不要停止执行。

使用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

相关问题