이벤트 루프
Coddy Node.js 여정의 Node.js 기초 섹션에 포함된 레슨. 24개 중 18번째.
콜백과 프라미스는 나중에 실행되며, 정확히 언제 실행되는지 모르면 버그가 숨어들기 쉽습니다.
Node는 먼저 모든 동기 코드를 끝까지 실행합니다. 그런 다음 마이크로태스크를 실행합니다. 여기에는 프라미스 콜백과 queueMicrotask에 전달된 함수가 포함됩니다. 그 후에야 타이머가 실행되며, setTimeout(fn, 0)도 시간이 되면 실행됩니다.
setTimeout(() => console.log('C timer'), 0);
Promise.resolve().then(() => console.log('B promise'));
console.log('A sync');
// A sync, B promise, C timer지연 시간이 0이라는 것은 마이크로태스크가 끝난 뒤 가능한 한 빨리 실행된다는 뜻이지, 마이크로태스크보다 먼저 실행된다는 뜻은 아닙니다. 타이머는 지연 시간 순서대로 실행되며, 지연 시간이 같으면 먼저 설정된 타이머가 먼저 실행됩니다.
챌린지
쉬움order.js는1 sync,2 microtask,3 timeout,4 timeout later를 이 순서대로 출력합니다.- 네 줄은 원래 위치에 그대로 두세요. 한 번의
queueMicrotask호출과 두 번의setTimeout호출로 감싸세요.
node order.js를 실행하고 예상한 결과와 비교하세요. 그런 다음 두 타이머의 지연 시간을 모두 0으로 설정하고 다시 실행하세요.
직접 해보기
// 이 줄들을 이동하지 않고 숫자 순서대로 출력되게 하세요.
// 대신 이 줄들을 queueMicrotask와 setTimeout으로 감싸세요.
console.log('4 timeout later');
console.log('3 timeout');
console.log('2 microtask');
console.log('1 sync');
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.