2014-07-01 3 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 

로그가 정상적으로 작동하는 것처럼 보이고 두 제목을 모두 볼 수 있습니다. 하지만 "Biology 101, ruby"가 두 번 실행되었습니다.

아무도 나를 도와 줄 수 있습니까? 감사합니다

답변

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

예 짝! 내 나쁜 내가 이미 그것을 고쳤다 고 괜찮아요 .. 당신은 대단히 원인을 지적하고 나에게 솔루션을주는 것에 대해 .. 정말 고마워 :) –

관련 문제