Storing nodejs fs.readfile's result in a varia

2019-03-28 09:53发布

I'm wondering if its possible to pass the contents of fs.readfile out of the scope of the readfile method, and store it in a variable similar to.

var a;

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

Then I can console.log(a); or pass it to another variable.

My question is is there a way to do this with fs.readFile so that the contents (data) get passed to the global variable 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

Thanks

1条回答
小情绪 Triste *
2楼-- · 2019-03-28 10:38

The problem you have isn't a problem of scope but of order of operations.

As readFile is asynchronous, console.log(global_data); occurs before the reading, and before the global_data = data; line is executed.

The right way is this :

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

In a simple program (usually not a web server), you might also want to use the synchronous operation readFileSync but it's generally preferable not to stop the execution.

Using readFileSync, you would do

var global_data = fs.readFileSync("example.txt").toString();
查看更多
登录 后发表回答