Javascript 从匿名函数外部访问变量

Javascript reaching variable from outside of anonymous function

我正在尝试使用 node.js 从文件中异步读取。这是我使用的代码:

var fs = require('fs');

fs.readFile('C:\Users\aonal\Desktop\gelenhamveri.txt', 'utf8', function(err, contents) {
    console.log(contents); 
    //return contents // didn't work. I tried to return it to a variable.

});
console.log('after calling readFile');
console.log(contents); //empty. I want to use it here.

我无法访问函数之外的内容。我试图 return 它或将它分配给一个全局变量,但它没有用。我的最终目的是将所有代码导出为一个函数,然后像这样在不同的模块中使用它:

module.exports = {
readFile : function(){//Same as above...}
}

所以我需要 return 内容。我的问题是如何 return 它的一个变量在匿名函数之外使用?

bluetoft 和 Maantje 的回答是正确的。您必须使用 readFileSync() 将输出分配给变量

您可以尝试使用 Promise

var fs = require("fs");
var Promise = require("promise"); 
var read = Promise.denodeify(fs.readFile);
var p = read("C:\Users\aonal\Desktop\gelenhamveri.txt", "utf8")
.then(function (contents) {
  console.log(contents)
})

通常,像fs.readFile 这样的异步函数会将回调函数作为最后一个参数。读取文件后将调用该函数。

如果你想用你自己的代码包装这样的函数,你需要继续相同的范式;换句话说,你的函数也应该接受一个回调函数:

var fs = require('fs');

module.exports = {
  readFile : function(callback) {
    fs.readFile('C:\Users\aonal\Desktop\gelenhamveri.txt', 'utf8', callback)
  }
}

并且任何调用代码需要传递一个回调函数:

yourModule.readFile(function(err, contents) {
  if (err) {
    console.error('an error occurred!', err);
    return;
  }
  console.log(contents);
});

正如其他人所建议的,除了传递回调函数之外,您还可以使用 promises,这是异步代码处理的另一种方法。