fs.write()在for循环中

时间:2018-06-19 13:28:31

标签: javascript node.js file-io fs

我正在编写一个代码,其中我必须创建等于数组中元素数量的文件,并在文件中写入相应的数组元素。 例如array = [one,two,three],那么我想让文件一的内容为一,依此类推。

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)的输出始终是最后一个元素的索引。

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

1 个答案:

答案 0 :(得分:0)

这与循环无关,但是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()