【问题标题】:Writing multiple files a loop in Nodejs在Nodejs中循环编写多个文件
【发布时间】:2014-08-21 17:27:09
【问题描述】:

您好,我在 nodejs 脚本中使用 for each 循环将多个文件写入本地位置。对于 courseTitleArray,我使用“Biology 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 

似乎循环工作正常,在日志中我可以看到两个标题。 但是在写“Biology 101,ruby”的时候已经执行了两次。

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

【问题讨论】:

    标签: javascript node.js fs


    【解决方案1】:

    你的问题是你的回调在循环结束时被调用,所以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);
    }
    

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

    【讨论】:

    • @AmilaIddamalgoda 是的,已修复。但是,如果您正确缩进代码开始,会更容易。
    • 是的,伙计!我的坏我已经修好了,这工作正常..非常感谢你指出原因并给我解决方案..真的很感激:)
    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2017-06-28
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多