将附加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()
访问fileName
variables,那么你需要在调用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 } }); });