자바스크립트의 이벤트 루프에서 비동기 함수를 대기시키는 task queue.
이 task queue에는 대표적으로 마이크로 테스크 큐(microtask queue), 매크로테스트 큐(macrotask queue)가 있다.
마이크로테스트 큐의 대표적인 예로는 자바스크립트 코드를 작성할때 비동기 처리를 돕는 프로미스(Promise)가 있고,
매크로테스크 큐의 예로는 setTimeout고 setInterval이 있다.
그리고 두 테스크 큐의 실행 순서는 마이크로 테스크 큐 > 매크로테스크 큐 이다.
Promise의 .then()은 마이크로태스크 큐에 등록되므로, 내부 작업이 아주 오래걸리는 작업이고, setTimeout의 딜레이는 0인 상황이더라도,
자바스크립트는 Promise를 먼저 처리하고, 그 다음 setTimeout을 실행한다는 것이다.
그렇다면 생각나는 것이 하나 있다.
async/await의 경우에는 ?
async/await은 Promise를 동기 함수처럼 작성할 수 있도록 도와주는 ES7에서 등장한 문법이다. async 함수는 항상 Promise를 반환하며, await은 해당 Promise가 해결될 때까지 기다린다.
await 뒤에 오는 작업은 Promise와 동일하게 마이크로태스크 큐로 전달된다.
따라서, Promise와 async/await은 우선순위가 동일하다.
둘 다 마이크로태스크 큐에 등록되므로, 매크로태스크 큐보다 항상 먼저 실행된다.
'react js' 카테고리의 다른 글
javascript에서 함수가 선언되고 실행되는 과정 (실행 문맥 execution context) (0) | 2024.11.21 |
---|---|
네이버 지도 위에 폴리곤을 그려보자 In React (0) | 2024.11.18 |
자바스크립트의 이벤트루프에 대해 정리해보자 (Callback Queue, Call Stack) (1) | 2024.11.15 |
Queue와 heap, Stack의 차이 in JavaScript (0) | 2024.11.14 |
Typescript의 정적 타입 검사란? (0) | 2024.11.12 |