您好我在nodejs脚本中使用for循环来将多个文件写入本地位置。对于courseTitleArray,我使用"生物学101,ruby"我可以写一个文件成功,但不是两者。请帮我解决。
到目前为止,这是我的代码
for (var value in CourseTitleArray) {
console.log( "Course Title " + CourseTitleArray[value]);
var newImageLocation = path.join(__dirname, 'app/img/courseImages', CourseTitleArray[value] + ".png");
fs.readFile(image.path, function(err, data) {
fs.writeFile(newImageLocation, data, function(err) {
console.log(CourseTitleArray[value] + " was created successfully");
});
});
console.log("Loop executed " + value);
}
在控制台中,我得到了以下日志。
Course Title Biology 101
Loop executed 0
Course Title ruby
Loop executed 1
ruby was created successfully
ruby was created successfully
似乎循环工作正常,并且在日志中我可以看到两个标题。 但是,当它写作"生物学101,ruby"已经执行了两次。
有人可以帮我解决这个问题吗?感谢
答案 0 :(得分:5)
您遇到的问题是,在循环结束时会调用您的回调,因此value
已更改。
解决方案是使用闭包来存储value
:
for (var value in CourseTitleArray) {
(function(value){
console.log( "Course Title " + CourseTitleArray[value]);
var newImageLocation = path.join(__dirname, 'app/img/courseImages', CourseTitleArray[value] + ".png");
fs.readFile(image.path, function(err, data) {
fs.writeFile(newImageLocation, data, function(err) {
console.log(CourseTitleArray[value] + " was created successfully");
});
});
console.log("Loop executed " + value);
})(value);
}
请注意,您对“循环执行”日志的含义并不清楚:当您登录时,尚未发生写作。