在Node.js中将多个文件写入循环

发布于 2021-01-31 23:08:54

嗨,我在nodejs脚本中使用了每个循环,以将多个文件写入本地位置。对于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

看起来循环工作正常,并且在日志中我可以看到两个标题。但是在撰写《生物学101,红宝石》时,已经执行了两次。

有人可以帮我吗?谢谢

关注者
0
被浏览
144
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    您的问题是循环完成时会调用您的回调,因此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);
    }
    

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



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看