Syncronous 동기 : 요청을 보낸 후 해당 요청의 응답을 받아야 다음 동작을 실행하는 방식Asynchronous 비동기 : 요청을 보낸 후 응답과 관계없이 다음 동작을 실행하는 방식자바스크립트는 동기적이고, blocking이며, single-threaded한 언어입니다. 하지만, 이것은 오직 한 연산에서의 특성을 의미하며, 모든 것에서의 특성을 의미하지 않습니다.
만약에, 데이터베이스로부터 많은 양의 데이터를 가져오는 요청을 해야 한다면, 어떻게 해야 할까요? 예를 들어, PG와 PostgreSQL가 데이터를 가져오는 동안 우리는 기다리고 싶지 않습니다. JavaScript 개발자들은 이러한 문제를 위한 해결책을 제시했습니다.
사람들이 JavaScript가 비동기 언어라고 흔히 오해하는 이유는, 우리는Javascript가 비동기식으로 동작하도록 조작할 수 있기 때문입니다. 그 방법에 대해 살펴보겠습니다.
Callback을 사용하는 것입니다.Callback은 데이터베이스에 요청을 보내는 callback 함수(또는 다른 중첩된 Callback 함수를 발생시킬 수 있도록 합니다. 그 함수가 데이터베이스로부터 응답을 기다릴 동안, 남은 코드를 자유롭게 실행할 수 있습니다. Function C, E, F, G는 모두 브라우저, 큐, 이벤트 루프에 보내집니다. Function C가 언제 해결될지 정확히 예측할 수 없기 때문에, 모든 종속 함수를 C안에 중첩시켜야 합니다. 결국 많은 중첩 함수가 생겨 코드가 복잡해지는 것이 바로 콜백 지옥 입니다. Promise를 쓰기 시작했습니다. 이것은 동기적으로 보이는, 비동기 처리 방식 입니다.Promise 객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타냅니다.
Promise를 사용하면, 한 블록 내에 많은 중첩 함수를 쓰지 않고도 비동기 처리가 가능합니다.module 지향적이며, 읽기 쉽다는 비동기적 프로그래밍의 장점을 포함합니다.Promise 객체는 new 키워드로 생성할 수 있으며 총 4개의 상태 값을 가진다.
1) pending: 아직 결과 값이 반환되지 않은 진행 중인 상태
2) settled: 결과 값이 성공 혹은 실패로 반환된 상태 (한번 setteld된 값은 재실행 할 수 없다.)
fulfilled: 성공
rejected: 실패