2013-10-21 4 views
0

Node.js에 Async Libeary을 사용하면 for 루프에서 변수를 참조하려고해도 작동하지 않습니다. 예를 들어Async.js 라이브러리에서 for 루프를 해제합니다.

:

var functionArray = [] 
, x; 

for(x = 0; x < 5; x++) { 
    functionArray.push(function (callback) { 
    console.log(x); 
    callback(); 
    }); 
} 

async.series(functionArray, function (err, results) { 
    console.log("Finished"); 
}); 

출력은 다음과 같습니다

5 
5 
5 
5 
5 

비동기 라이브러리에 특정 보인다. 당신과 같이 라이브러리없이 기능을 실행하면 :

for(x = 0; x < 5; x++) { 
    functionArray[x](function() {}); 
} 

출력은 다음과 같습니다 async.parallel 기능을 사용할 때이 같은 일을 눈치 챘을

0 
1 
2 
3 
4 

.

이 문제가 발생합니까? 배열 안에 여러 개의 비슷한 함수를 여러개 (예를 들어, 배열을 인덱싱 할 때) 실행해야한다면 비동기가 아닌 다른 함수 바로 뒤에서 실행할 필요가 있을까요? 이것이 어떻게 성취 될 수 있는가?

답변

1

비동기 적으로 호출되는 모든 함수에 대해 비동기 라이브러리뿐 아니라 동일합니다. 이 함수는 루프가 완료되면 호출되므로 변수의 끝 상태가됩니다.

랩 즉시 실행 익명 함수에서 함수 내부의 코드, 각 반복에 대한 별도의 변수를 만들 수 있도록 :

for(x = 0; x < 5; x++) { 

    (function(y){ 

    functionArray.push(function (callback) { 
     console.log(y); 
     callback(); 
    }); 

    })(x); 

} 
+0

감사합니다. 비동기 라이브러리에 사과드립니다. –