기본적으로 아래와 같이 반복문을 돌리면
for(var i = 0; i < 10; i++) { //logic console.log(i); //logic console.log(i); //logic }
기대값은 '00112233445566778899' 일것이다.
하지만 노드는 위와 같은 코드인대도 '012345678999999999'가 될 수 있다.
이유는 노드가 기본적으로 비동기 처리를 하기 때문이다.
저 for문안에 만약 DB에서 데이터를 가져오는 코드가 있다면 노드는 그 시간이 걸리는 처리를 뒤로 밀어버리고 나머지를 한꺼번에 처리하고 누적된 순서만큼 데이터를 반복적으로 가져온다. 때문에 기타 다른 동기적 처리하는 언어들같은 기대값이 나오지 않을 수 있다.
이를 방지하는 방법은 간단하다.
for(var i = 0; i < 10; i++) { (function(i){ //logic console.log(i); //logic console.log(i); //logic })(i); }
이와같이 for문 안의 코드 전체를 (function(i){ //logic })(i); 으로 감싸주면 동기화 처리가 된다.
여러가지 방법이 있을테지만 이 방법이 가장 간단한듯하다.
'About_Node.js' 카테고리의 다른 글
[node.js]페이지이동이나 새로고침 시 세션만료갱신 (express-session모듈) (0) | 2017.02.22 |
---|---|
[node.js]노드 개발시 추천하는 IDE (0) | 2016.11.18 |
[node.js]파일업로드 - multer (0) | 2016.11.18 |
[node.js]화면단(ejs) 반복문 안에서 함수 사용하는 법 (0) | 2016.11.17 |