
function aaa(qqq) {
// 함수 로직
}
aaa(function(){})
callback함수는 함수의 인자로 들어가는 함수를 뜻한다.

API 요청 또한 callback함수를 사용해서 데이터를 받아온다.

콜백 지옥에 빠져서 코드의 유지보수가 어렵게 된다.
콜백 지옥을 개선한 방법이 Promise 이다.


promise chain
promise를 계속해서 체이닝 시키는것을 의미한다.
위의 코드에서 console 실행 결과는 1 > 5 > 2 > 3 > 4
setTimeout과 같이 axios를 통해 get하는 데이터는 queue에 저장되었다가 실행되기 때문이다.

function axios() {
return new Promise((성공시, 실패시) => {
})
}

promise 앞에만 await를 붙일 수 있다.매크로 / 마이크로 태스크 큐는 실행 우선순위가 다르다.
마이크로 태스크큐가 우선순위가 높고, 매크로 태스크큐는 우선순위가 낮다.
따라서, 마이크로 태스크큐에 보관된 부분이 먼저 실행되고, 매크로 태스크큐에 저장된 부분이 나중에 실행된다.

위의 예시에서 콘솔 실행 순서는
시작 > 끝 > Promise1 > Promise2 > setTimeout > setTimeout 안의 Promise > setInterval
이런식으로 진행된다.
async function qqq() {
await axios.get("url")
}
axios.get이 await를 만나면 마이크로 태스크큐에 들어간다. (axios는 Promise이기 때문)
그 다음 await를 감싸고 있는 함수(qqq)도 마이크로 태스크큐에 들어가게 된다.
axios를 기다리는것처럼 보였을 뿐, axios.get이 먼저 실행되고 뒤에 있던 함수가 실행되는 원리이다.
