더북(TheBook)

제일 먼저 실행되는 것은 immediate입니다. immediate2는 바로 clearImmediate를 사용해서 취소했으므로 실행되지 않습니다. 코드 실행 1초 후에는 interval의 콜백이 실행됩니다. 코드 실행 1.5초 후에는 timeout의 콜백이 실행될 것입니다. interval의 콜백은 1초마다 실행되므로 코드 실행 후 2초가 지났을 때도 콜백이 실행됩니다. 2.5초가 지났을 때 clearTimeoutclearInterval이 각각 timeout2interval을 취소합니다. 따라서 코드 실행 3초 후에는 아무 로그도 남지 않습니다.

▲ 그림 3-5 실행 순서

콘솔

$ node timer
즉시 실행
1초마다 실행
1.5초 후 실행
1초마다 실행

Note ≣ setImmediate(콜백)과 setTimeout(콜백, 0)

setImmediate(콜백)setTimeout(콜백, 0)에 담긴 콜백 함수는 이벤트 루프를 거친 뒤 즉시 실행됩니다. 둘의 차이점은 무엇일까요? 특수한 경우에 setImmediatesetTimeout(콜백, 0)보다 먼저 실행됩니다. 파일 시스템 접근, 네트워킹 같은 I/O 작업의 콜백 함수 안에서 타이머를 호출하는 경우입니다. 하지만 setImmediate가 항상 setTimeout(콜백, 0)보다 먼저 호출되는 것은 아니라는 사실만 알아두세요. 헷갈리지 않도록 setTimeout(콜백, 0)은 사용하지 않는 것을 권장합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.