Node.js fs.readfile /异步文件访问:获取回调中的当前文件

时间:2014-03-01 12:02:55

标签: node.js file asynchronous readfile fs

我正在寻找一种方法来获取有关回调中当前写入文件的信息,例如: G。完整的文件名。

1 个答案:

答案 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选择不同的参数名称。