我正在寻找一种方法来获取有关回调中当前写入文件的信息,例如: G。完整的文件名。
答案 0 :(得分:3)
这种天真的做法是:
var filename = "/myfile.txt"
fs.readFile(filename, function(err, contents) {
console.log("Hey, I just read" + filename)
if(err)
console.log("There was an error reading the file.")
else
console.log("File contents are " + contents)
})
上述代码的问题是,如果调用filename
的回调时任何其他代码更改了fs.readFile
变量,则记录的文件名将是错误的。
相反,你应该这样做:
var filename = "/myfile.txt"
fs.readFile(filename, makeInformFunction(filename))
function makeInformFunction(filename) {
return function(err, contents) {
console.log("Hey, I just read" + filename)
if(err)
console.log("There was an error reading the file.")
else
console.log("File contents are " + contents)
}
}
这里,filename
变量变为makeInformFunction
函数的本地变量,这使得filename
的值对于此函数的每个特定调用都是固定的。 makeInformFunction
使用filename
的固定值创建一个新函数,然后将其用作回调。
请注意,filename
中的makeInformFunction
指的是与外部范围中的filename
完全不同的变量。实际上,因为makeInformFunction
中使用的参数名称使用与外部作用域中的变量相同的名称,所以外部作用域中的此变量在该函数作用域内完全无法访问。如果由于某种原因,您想要访问该外部变量,则需要为makeInformFunction
选择不同的参数名称。