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

Pau*_*aul 7 javascript scope node.js

我想知道是否可以将fs.readfile的内容传递出readfile方法的范围,并将其存储在类似于的变量中.

var a;

function b () {
    var c = "from scope of b";
    a = c;
}
b();
Run Code Online (Sandbox Code Playgroud)

然后我可以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
Run Code Online (Sandbox Code Playgroud)

谢谢

Den*_*ret 22

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

由于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);
});
Run Code Online (Sandbox Code Playgroud)

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

使用readFileSync,你会这样做

var global_data = fs.readFileSync("example.txt").toString();
Run Code Online (Sandbox Code Playgroud)