首页 > 解决方案 > fs.write() 在 for 循环中

问题描述

我正在编写一个代码,其中我必须创建等于数组中元素数量的文件,并在文件中写入相应的数组元素。例如数组= [一,二,三],然后我想要文件一,内容一,依此类推。

var inputLength = inputs.length;

inputs.forEach(function(elem) {
    i = inputs.indexOf(elem);
    console.log(i);
    fs.writeFile(Execute.path + Execute.folder + "/inputFile" + i, elem, function(err) {
        if (err) {
            console.log(err);
        } else {
            console.log("Input" + i + " file was saved!");
        }

    });


    console.log(i);


});

第一个的输出console.log(i)很好,即 0,1,2,3 等等,但第二个的输出console.log(i)始终是最后一个元素的索引。

我的代码有什么问题以及如何实现我的目标

标签: javascriptnode.jsfile-iofs

解决方案


这与循环无关,而是fs.writeFile()异步调用,因此您需要为此使用 IIFE / Closure:

var inputLength = inputs.length;

inputs.forEach(function(elem) {
  i = inputs.indexOf(elem);
  (function (i) {
    console.log(i);
    fs.writeFile(Execute.path + Execute.folder + "/inputFile" + i, elem, function(err) {
      if (err) {
        console.log(err);
      } else {
        console.log("Input" + i + " file was saved!");
      }
    });
    console.log(i);
  })(i);
});

另一种方法是使用同步对应物:fs.writeFileSync().


推荐阅读