티스토리 뷰
[NodeJS] 노드 내장 객체 타이머 (setTimeout, setInterval, setImmediate)
리미32 2023. 4. 18. 12:52안녕하세요! 오늘은 노드 내장 객체 타이머에 대해서 알아보겠습니다.
1. 타이머 종류
타이머 기능을 제공하는 함수들은 다음과 같이 setTimeout,setInterval,setImmediate가 있습니다. 이때, 노드에서 타이머 객체는 global 객체 안에 들어있습니다. 그리고 타이머 함수들은 모두 아이디를 반환합니다. 반환된 아이디는 변수에 저장됩니다.
- setTimeout(콜백 함수, 밀리초) : 주어진 밀리초(1000분의 1초) 이후에 콜백 함수를 실행
- setInterval(콜백 함수, 밀리초) : 주어진 밀리초마다 콜백 함수를 반복 실행
- setImmediate(콜백 함수) : 콜백 함수를 즉시 실행합니다.
setTimeout( 콜백 함수, 0)와 setImmediate(콜백 함수)의 차이점은 특수한 경우(파일 시스템 접근, 네트워킹)에서만 setImmediate가 setTimeout( 콜백 함수, 0)보다 먼저 실행된다는 것입니다. 하지만 특수한 경우에만 실행되기때문에 setTimeout( 콜백 함수, 0)은 안쓰는게 좋습니다.
타이머의 반환값을 저장한 변수들은 타이머를 취소하는데 쓰입니다. 다음은 타이머를 취소하는 함수들입니다.
- clearTimeout(아이디) : setTimeout을 취소
- clearInterval(아이디) : setInterval을 취소
- clearImmediate(아이디) : setImmediate를 취소
2. 타이머 실행 순서
타이머 함수들이 섞여있을 경우, 실행 순서를 알아보겠습니다.
const timeout=setTimeout(()=>{
console.log('1.5초 후 실행, setTimeout');
},1500);
const interval=setInterval(()=>{
console.log('1초마다 실행, setInterval');
},1000);
const timeout2=setTimeout(()=>{
console.log('실행되지 않습니다. setTimeout ');
},3000);
setTimeout(()=>{
clearTimeout(timeout2); //timeout2 취소
clearInterval(interval); //2.5초 뒤에 실행 중지
},2500);
const immediate=setImmediate(()=>{
console.log('즉시 실행1, immediate');
});
const immediate2=setImmediate(()=>{
console.log('실행되지 않습니다.');
});
clearImmediate(immediate2);
가장 먼저 실행될 함수는 setImmediate입니다. 이때, setImmediate는 두개가 있는데, 하나는 clearImmediate에 의해 취소되었기 때문에 다른 하나만 실행됩니다. 그 다음에 실행될 함수는 setInterval과 setTimeout 중에서 더 빠르게 지정된 함수인 아이디가 interval인 setInterval이 1초뒤에 실행됩니다. 그리고 아이디가 timeout인 setTimeout이 처음 실행으로부터 1.5초 뒤에 실행됩니다. 아이디가 interval인 setInterval함수는 1초마다 실행되기 때문에, 처음 실행으로부터 2초뒤에 다시 실행됩니다.
원래라면 아이디가 timeout2인 setTimeout과 아이디가 interval인 setInterval 함수가 처음 실행으로부터 3초뒤에 실행됐겠지만, 2.5초뒤에 실행되는 setTimeout함수에 timeout2와 interval 타이머를 취소하는 clear함수가 있으므로 더이상 실행되지 않습니다.

NodeJS 교과서를 참고했습니다.
3. 프로미스 타이머
프로미스를 활용해서 타이머 함수를 사용할 수 있습니다. 이 방법은 노드 내장 객체는 아니고 노드 내장 모듈을 활용한 것입니다. await을 활용해서 타이머를 구성할 수 있습니다. 이때, for await of도 가능합니다.
이상으로 타이머 객체에 대해서 알아보았습니다!
'Back_end > NodeJS' 카테고리의 다른 글
[NodeJS] Passport 인증 구현하기 - Session (0) | 2023.05.30 |
---|---|
[NodeJS] 내장 객체 console (0) | 2023.04.15 |
[NodeJS] 내장 객체 - global (0) | 2023.04.14 |
[NodeJS] 모듈 (CommonJS & ECMAScript) (0) | 2023.04.13 |
[NodeJS] REPL이란? (0) | 2023.04.13 |
- Total
- Today
- Yesterday
- 프로젝트
- Linux
- 혼공
- 리눅스
- 혼공단 9기
- 혼공단
- 해커톤
- SQL
- 백준
- AWS
- JS
- 공룡책
- Signal
- nodejs
- 깃 예제
- C++
- 운영체제
- 개발
- 혼공단 SQL
- 스페인
- 백엔드 개발
- MySQL
- JavaScript
- googleapis
- 교환학생
- 스페인 교환학생
- 개발일지
- 혼공학습단
- Process
- 자바스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |