자바스크립트의 이벤트 루프에서 비동기 함수를 대기시키는 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은 우선순위가 동일하다.

둘 다 마이크로태스크 큐에 등록되므로, 매크로태스크 큐보다 항상 먼저 실행된다.

728x90

+ Recent posts