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)
的输出始终是最后一个元素的索引。
我的代码中有什么问题以及如何实现我的目标
答案 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()
。