자바스크립트는 싱글 쓰레드로 동작(쓰레드 = 일꾼) -> 작업을 하나씩하고 동시작업을 하지 않는다.
=> 자바 스크립트는 비동기 작업을 동시에 할 수 있다.
싱글쓰레드 = 콜스텍이 하나 => 작업을 시작하면 콜스특에 한개씩 쌓이고 작업을 끝내면 한개씩 사라진다.
비동기 => 자바스크립트 실행을 도와주는 친구들과 같이 처리를 한다.
엔진 + Web API( ex) AJAX, setTimeout, dom, 등등) 콜백큐, 이벤트 루프
자바스크립트는 비동기 요청을 받으면 콜스텍에 들어갔다가 웹 api에 일을 위임한다. 그러면 콜백함수는 이벤트루프를 통해서 콜백큐에 콜백함수를 넘긴다. 그러면 콜스텍이 처리하고 사라진다
비동기 작업을 여러번하면 받아온 값을 가지고 비동기 작업을 하고 이게 반복되면 중첩되고 코드가 깊어지고 어려워진다. (=콜벡헬) 이 현상을 현상하고자 나온게 Promise 이다.
async는 함수앞에 붙여서 사용, 항상 프라미스를 반환(프라미스가 아닌값이라도 프라미스를 감싸서 반환)
await는 async없이 사용 불가능 async의 함수 안에서만 동작한다. await는 프라미스가 처리될 때까지 기다렸다가 그 이후에 결과를 반환.