我正在使用fs.writeFile将大量文件写入目录。我想使用在回调中写入的文件的名称(例如打印“文件x已写入”)。
如何获取正在写入的文件的名称(x)?
使用我传递给writeFile的filename变量将无效,因为writeFile是异步的。
谢谢!
答案 0 :(得分:4)
所以我认为你正在做这样的事情(只是猜测,因为你没有发布代码):
var files = [ 'file1.txt', 'file2.txt', 'file3.txt' ];
for (var i = 0; i < files.length; i++) {
var filename = files[i];
fs.writeFile(filename, CONTENTS, function(err) {
console.log('File written:', filename);
});
}
这不会起作用,因为filename
将被重复使用并覆盖每次迭代。
最简单的解决方案是使用forEach
:
files.forEach(function(filename) {
fs.writeFile(filename, CONTENTS, function(err) {
console.log('File written:', filename);
});
});
这将为每次迭代创建一个新的范围filename
变量,不会被覆盖。