Javascript从匿名函数外部到达变量

时间:2016-05-22 16:34:38

标签: javascript node.js anonymous-function readfile

我正在尝试使用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.

我无法触及功能之外的内容。我试图返回它或将其分配给全局变量,但它不起作用。我的最终目的是将所有代码导出为函数,然后在不同的模块中使用它,如下所示:

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

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

3 个答案:

答案 0 :(得分:2)

通常,像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代替传递回调函数,这是异步代码处理的另一种方法。

答案 1 :(得分:1)

您可以尝试使用Promise

ls

答案 2 :(得分:0)

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