NodeJS readFile()检索文件名

我遍历包含文件名的数组。 对于他们每个人,我调用readFile() 。 当调用相应的callback函数时,我希望检索传递给readFile()的文件名作为参数。 可以这样做吗?

封闭了一个简短的代码,以更好地解释我的意图。

 var fs = require("fs"); var files = ["first.txt", "second.txt"]; for (var index in files) { fs.readFile(files[index], function(err, data) { //var filename = files[index]; // If I am not mistaken, readFile() is asynchronous. Hence, when its // callback is invoked, files[index] may correspond to a different file. // (the index had a progression). }); } 

你也可以使用forEach而不是for循环:

 files.forEach(function (file){ fs.readFile(file, function (err, data){ console.log("Reading %s...", file) }) }) 

你可以使用闭包来做到这一点:

 for (var index in files) { (function (filename) { fs.readFile(filename, function(err, data) { // You can use 'filename' here as well. console.log(filename); }); }(files[index])); } 

现在每个文件名都被保存为一个函数的参数,不会受循环继续迭代的影响。

你也可以使用Function.prototype.bind预先设定一个参数。 bind会返回一个新的函数,当被调用的时候,它会以files [index]作为第一个参数来调用原始函数。

但不知道这是否是一个好办法。

 var fs = require("fs"); var files = {"first.txt", "second.txt"}; for (var index in files) { fs.readFile(files[index], (function(filename, err, data) { //filename }).bind(null, files[index]) ); }