- 자바스크립트의 프로미스는 비동기 작업의 완료 또는 실패를 처리하기 위한 객체
- 프로미스가 생성된 시점에는 알려지지 않았을 수도 있는 값을 위한 대리자
- 비동기 연산이 종료된 이후에 결과 값과 실패 사유를 처리하기 위함
- 프로미스를 사용하면 비동기 메서드에서 동기메서드처럼 값을 반환 할 수 있음.
- 다만, 최종 결과를 반환하는건 아니고 미래의 어떤 시점에 결과를 제공하겠다는 프로미스(약속)을 반환함
프로미스 상태
- 대기 (pending)
- 이행 (fulfilled)
- 거부(rejected)
- 대기중인 프로미스는 값과 함께 이행할 수도, 어떤 이유(오류)로 인해 거부 될 수도 있다.
- 이행이나 거부 될 때, 프로미스의 then 메서드에 의해 대기열(큐)에 추가된 처리기들이 호출된다.
- 이미 이행했거나, 거부된 프로미스에 처리기를 연결해도 호출되므로 비동기 연산과 처리기 연결 사이에 경합조건은 없다.
Resolved
- 프로미스가 다른 프로미스의 최종 항태와 일치하도록 settled 되거나 locked in 되어 더이상 해결하거나 거부해도 아무런 효과가 없음을 의미한다.
- resolved 프로미스는 종종 fuliflled 프로미스와 동일하지만,
- 해결된 프로미스도 보류중(pending)이거나 거부(rejected)될 수 있다.
new Promise((resolveOuter) => {
resolveOuter(
new Promise((resolveInner) => {
setTimeout(resolveInner, 1000);
}),
);
});
- 위의 프로미스는 생성될 때 resolveOuter 가 동기적으로 호출되기 때문에 이미 해결되었지만,
- 다른 프로미스와 함께 해결되므로 1초 후 내부 프로미스가 이행될 때 까지는 이행되지 않는다.
- 실제로 resolution은 백그라운드에서 이루어지며, 관찰할 수 없으며 이행 또는 거부 여부만 확인 가능하다.
Promise 에서 try-catch를 사용 할 수 없는 이유