본문 바로가기

About_Node.js

[node.js]서버에서 동기식 반복문 돌리기

기본적으로 아래와 같이 반복문을 돌리면 

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); 으로 감싸주면 동기화 처리가 된다.

여러가지 방법이 있을테지만 이 방법이 가장 간단한듯하다.