2014-07-01 38 views
2

您好我正在使用每個循環以在nodejs腳本中將多個文件寫入本地位置。對於courseTitleArray,我使用的是「Biology 101,ruby」,我可以編寫一個文件成功不是兩個。請幫助我。在Nodejs中編寫多個文件循環

這裏是我到目前爲止的代碼

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,紅寶石」已經執行了兩次。

有人可以幫我解決這個問題嗎?謝謝

回答

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

注意,目前還不清楚你的意思是你的「地執行的環路」什麼日誌:當您登錄時,寫入未還沒有發生。

+0

似乎它有一個語法錯誤,對吧? –

+0

@AmilaIddamalgoda是的,修復它。但如果你已經正確地縮進你的代碼開始,它會更容易。 –

+0

是伴侶!我不好,我已經修復它,這是工作正常..請你非常指出原因,並給我解決方案..真的很感激它:) –