将nodejs fs.readfile的结果存储在变量中并传递给全局变量

时间:2013-08-28 17:15:22

标签: javascript node.js scope

我想知道是否可以将fs.readfile的内容传递出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

由于

1 个答案:

答案 0 :(得分:17)

您遇到的问题不是范围问题,而是操作顺序问题。

由于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();