20

我想知道是否可以将 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
4

1 回答 1

39

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

由于 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();
于 2013-08-28T17:18:02.580 回答