javascript - 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)
始终是最后一个元素的索引。
我的代码有什么问题以及如何实现我的目标
解决方案
这与循环无关,而是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()
.
推荐阅读
- python-3.x - 如何比较两个列表并返回一个包含共享相同索引的元素的列表?
- c# - 如何获得 .NET 重定向以使用部署到具有 URL 后缀的 Azure API 管理服务的 API?
- python - 如何在python中找到基础扩展矩阵
- php - 使用 jquery 转发器时表单不发送输入字段
- c# - WPF 应用程序 .Core 3.0 和 microsoft 功能区控件库 4.0
- css - 过渡不适用于多个属性
- windows - 如何在本地安装和运行量角器
- css - 溢出:隐藏在页面的左侧和右侧添加填充
- php - api 平台在 https://localhost:8443/ 浏览期间获取 502 错误网关
- android - Moshi 1.9.x 无法序列化 Kotlin 类型