我想知道是否可以将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
由于
答案 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();