将附加参数传递给 Node js 中 fs.readFile 的回调
Passing additional parameters to the callback of fs.readFile in Node js
是否可以将其他参数传递给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
或 null(如果未发生),下一个参数将包含文件的数据(如果有)。
如果要访问回调中的fileName
变量以获取fs.readFile()
,则需要在调用fs.readFile()
的同一范围内定义它。这或多或少需要您使用匿名函数。但是,您仍应将其命名为更好的错误堆栈跟踪。
_.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
}
});
});
实际上,您现在有一种方法可以做到这一点。可以使用 .bind
函数将变量传递给回调函数。例如:
for (file of files) {
fs.readFile(`./${file}`, 'utf8', gotFile.bind({ "filename": file }))
}
在你的回调函数中(在我的例子中gotFile
),你 van 使用变量文件名如下:
console.log(`Read ${this.file}.json`)
正如@Aditya评论的那样,.bind()
解决了问题,但提供的代码对我不起作用,所以我让它像这样工作:
fs.readFile(fullPath, parseXML.bind(null, additionalParameter))
const parseXML = (additionalParameter, error, fileContents) => {
console.log(additionalParameter)
}
相关文章:
- 为什么fs.readFile在windows上花费太多时间
- 为什么这个 fs.readFile 循环没有将其结果推送到我的数组
- Node res.write() and fs.readFile
- 使用Node.js'fs.readFile()返回字符串出现的行
- 节点.js解析 fs.readFile() 的意外数字转换
- fs.readFile 的替代方法,用于在 Express 中使用 res.json 时加载车把模板
- 使用 require vs fs.readFile 读取 json 文件内容
- Angular 没有从 FS.readFile 获取带有承诺的数据
- Async.series 不适用于 fs.readFile
- Javascript / NodeJs - fs.readFile 在读取文件之前使用回调
- 从 fs.readFile 获取数据
- Hapijs、fs.readfile、fs.writefile和childprocess.exec我如何控制异步
- 存储nodejs fs.readfile's产生一个变量并传递给全局变量
- 为什么fs.readFile返回缓冲区
- 为什么我不能使用响应?写入fs.readFile
- javascript回调-处理读取文件与fs.readFile
- 在fs.readfile在使用fs.readfile.bind(context,pathArgument)时被调用
- fs.readFile返回Buffer对象,toString将使终端报错
- React和Electron with Bablify: Uncaught TypeError: fs.readFile
- TypeError: fs.readFile不是一个函数