node api 의 callback 함수들은 비동기
로 동작
let num = 1;
const interval = setInterval(() => {
console.log(num++);
}, 1000);
*// 1000ms 마다 callback 함수를 수행*
setTimeout(() => {
console.log("Timeout");
clearInterval(interval); // setInterval 종료 함수
}, 6000);
/*[출력 결과]
1
2
3
4
5
Timeout
*/
인수로 전달된 모든 함수는 이벤트 루프의 다음 반복에서 실행되는 콜백입니다.
console.log('code1');
setTimeout(() => {
console.log('setTimeout 0');
}, 0);
console.log('code2');
setImmediate(() => {
console.log('setImmediate');
});
console.log('code3');
process.nextTick(() => {
console.log('process.nextTick');
});
/*
[출력 결과]
code1
code2
code3
nextTick
setTimeout 0
setImmediate
*/
처리 순서
Call Stack 에 있는 log가 먼저 처리되고
Task Queue에 setTimeout, setImmediate, nextTick 의 node api 함수들이 Call Stack으로 옮겨져 하나씩 처리 된다.
nextTick은 Task Queue의 맨 처음으로 처리되고, 다음으로
실행 컨텍스트의 호출 순서대로 setTimeout, setImmediate 순으로 실행된다. 하지만 비동기의 처리가 완료되는 순서는 nextTick을 제외하고는 무엇이 더 먼저 출력 될지는 보장할 수 없다.
( setTimeout 보다 setImmediate 가 먼저 처리되어 출력 될 수 있다. )