【问题标题】:Access name of file being written by fs.writeFilefs.writeFile 正在写入的文件的访问名
【发布时间】:2013-12-01 15:02:47
【问题描述】:

我正在使用 fs.writeFile 将多个文件写入一个目录。我想在回调中使用正在写入的文件的名称(例如打印“文件 x 已被写入”)。

如何获取正在写入的文件的名称 (x)?

由于 writeFile 是异步的,使用我传递给 writeFile 的文件名变量将不起作用。

谢谢!

【问题讨论】:

  • fs.writeFile的第一个参数是文件名,由你指定。为什么你不能在回调中控制台记录相同的字符串?
  • writeFile 的回调不会在 writeFile 被调用后直接执行,因为它是异步/非阻塞的。这意味着 writeFile 在文件被写入之前不会返回/执行其回调。这需要一段时间,并且由于 for 循环中的变量不断被覆盖,因此在写入文件完成时,它很可能处于不同的迭代中。 robertklep 下面的回答可能更好地解释了这一点。

标签: node.js


【解决方案1】:

所以我认为你正在做这样的事情(只是猜测,因为你没有发布代码):

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 变量,该变量不会被覆盖。

【讨论】:

    猜你喜欢
    • 2019-01-09
    • 2017-09-14
    • 2019-01-26
    • 1970-01-01
    • 2019-12-22
    • 2019-01-12
    • 1970-01-01
    • 2020-12-16
    • 2020-12-09
    相关资源
    最近更新 更多