是否可以将附加参数传递给 fs.readFile
的回调函数。我有我的代码来读取目录并解析所有 XML 文档。我需要将文件名传递到回调链中以进行额外处理。截至目前,我的代码是
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
是我定义为单独函数的回调,我想将变量 newFileName
传递给回调函数 parseXML
。
注意:如果我将回调编写为匿名函数,我可以将访问传递给变量,但我试图避免回调的进一步嵌套。
最佳答案
不,您不能将额外的值传递给回调函数,因为 fs.readFile()
不支持它。它只会将 2 个值始终传回回调函数。它遵循 error-first callback结构,这意味着第一个参数将是 Error
或 null(如果未发生),下一个参数将包含文件的数据(如果有)。
如果您想在 fs.readFile()
的回调中访问 fileName
变量,那么您需要在与 fs 相同的范围内定义它.readFile()
被调用。这或多或少需要您使用匿名函数。但是,您仍应将其命名为更好的 Error 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
}
});
});
关于javascript - 将附加参数传递给 Node js 中 fs.readFile 的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38315052/