在Nodejs中编写多个文件循环

时间:2014-07-01 08:12:53

标签: javascript node.js fs

您好我在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"已经执行了两次。

有人可以帮我解决这个问题吗?感谢

1 个答案:

答案 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);
}

请注意,您对“循环执行”日志的含义并不清楚:当您登录时,尚未发生写作。