현재 실행중인 코드가 끝나야 다음 코드를 실행하는 방식, 일반적인 프로그래밍 세계에서는 코드는 모두 동기적으로 실행된다. 즉, 앞선 코드가 끝나야만 그 다음 코드가 수행이 된다.
실행중인 코드의 완료 여부와 무관하게 즉시 다음 코드로 넘어가는 방식
- setTimeout, addEventListner 등
- 별도의 요청, 실행 대기, 보류 등과 같은 코드는 모두 비동기적 코드
- 대표적으로 서버 통신과 관련된 로직들 포함
- 콜백 함수를 익명 함수로 전달하는 과정이 반복되어 코드의 들여쓰기 수준이 헬 수준인 경우
- 주로 이벤트 처리 및 서버 통신과 같은 비동기적 작업을 수행할 때 발생한다.
- 가독성 하락, 수정이 어렵다.
- 이를 극복하기 위해 then ~ catch, async / await 등장하였다.
- Promise 객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타낸다.
- Promise 객체에 담기는 주요한 상태정보
1. 대기(pending): localhost에서 서버에 요청을 한 직후. 아직 성공(resolve)또는 실패(rejected)되지 않은 상태이다.
2. 이행(fulfilled): 서버가 정상적으로 데이터를 localhost한테 전달한 상태이다.
3. 거부(rejected): 서버가 localhost에게 데이터를 전달하지 못한 경우.