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]) ); }