将附加parameter passing给Node js中fs.readFile的callback函数

是否有可能将其他parameter passing给fs.readFile的callback函数。 我有我的代码来读取一个目录,并parsing所有的XML文件。 我需要传递文件名的callback链进行额外的处理。 截至目前我的代码是

 var fs = require('fs'); var path = require('path'); module.exports.extractXMLBody = function (dirPath, ext) { fs.stat(dirPath, function (err, stats) { if (stats.isDirectory()) { fetchFiles(dirPath, ext, function (listOfFiles) { _.each(listOfFiles, function (val, key) { var completePath = dirPath + '/' + val; var fileName = path.basename(val, path.extname(val)) // TODO : Figure out to pass additional parameters fs.readFile(fullPath, parseXML); }); }); } }); } 

这里parseXML是我已经定义为一个单独的函数的callback&我想要传递variablesnewFileName到callback函数parseXML

注意:如果我把callback写成匿名函数,我可以通过访问variables,但我试图避免进一步嵌套的callback。

不,您不能将其他值传递给callback函数,因为fs.readFile()不支持。 它只会一直回传2个值到callback函数。 它遵循一个错误优先的callback结构,所以这意味着第一个参数将是一个Error或空,如果没有发生,下一个参数将包含文件的数据,如果有的话。

如果你想在fs.readFile()callbackfs.readFile()访问fileNamevariables,那么你需要在调用fs.readFile()的同一个作用域中定义它。 这或多或less会要求你去一个匿名函数。 不过,你仍然应该将其命名为更好的错误StackTraces。

 _.each(listOfFiles, function (val, key) { var completePath = dirPath + '/' + val; var fileName = path.basename(val, path.extname(val)); fs.readFile(fullPath, function parseXML(err, data) { if(err) { console.log(err); } else { // parseXML and still have access to fileName } }); });