Synchronous(동기) : 요청을 보낸 후 응답을 받을 때 까지 기다리고, 응답을 받으면 다음 동작 실행
Asynchronous(비동기): 요청을 보낸 후 응답에 관계없이 다음 동작을 실행
Async의 순서를 제어하기 위해 Callback을 사용하게 되는데 콜백이 지나치게 많으면 Callback Hell 이 일어날 수도 있다
그렇기에 이런점을 보완하기 위해 Promise를 사용하게 된다
Promise가 일종의 Class라 생각하면 쉽다. new Promise()로 새로운 인스턴스를 만들어내게 되는데
Promise는 세가지 상태를 가진다
대기(pending): 이행하거나 거부되지 않은 초기 상태.
이행(fulfilled): 연산이 성공적으로 완료됨.
거부(rejected): 연산이 실패함.
const example = () => {
return new Promise((resolve, reject) => {
if(true){
return resolve("success")
} else {
return reject("fail")
}
})
}
example()
.then(data => {
console.log(data) // success
})
primise는 자체의 콜백(resolve, reject)를 갖는데 new Promise() 메서드를 호출하면 대기(Pending) 상태가 된다. 대기(pending)상태에서 이행(fulfilled)면 resolve를 거부(rejected)시 reject를 실행하게 된다
resolve는 .then을 이용해 결과값을 받고 다음 task를 이어서 진행, rejecte는 .catch 로 에러핸들링을 할 수 있다