NodeJS readFile()获取文件名

NodeJS readFile() retrieve filename

本文关键字:获取 文件名 readFile NodeJS      更新时间:2023-09-26

我正在迭代一个包含文件名的数组。对于它们中的每一个,我调用readFile()。当调用相应的回调时,我希望检索作为参数传递给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).
    });
}

可以使用闭包:

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

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

您也可以使用forEach代替for循环:

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

还可以使用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])
    );
}