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,这是异步代码处理的另一种方法。
我正在尝试使用 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,这是异步代码处理的另一种方法。