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
: 실패