본문 바로가기
공부낙서장

[JS] Promise

by 곰인간 2024. 7. 22.

Promise는 callback, async/await와 마찬가지로 비동기 작업을 처리하는 자바스크립트 객체이다.

es6에서 callback 지옥을 해결하기 위해 도입되었다.

Proimise는 비동기 작업을 실행할  fulfilled (이행), pending (대기), rejected (거부) 이 3가지의 상태를 가진다.

then, catch, finally 메서드를 이용해 체이닝 형태로 작업이 처리가 가능하며, 

Promise가 fulfilled상태에서 resolve가 호출되면 then 블록이 실행된다.

반대로 Promise가 rejected가 되면 catch 블록이 실행된다.

마지막으로 finally는 반드시 실행되는 블록이다.

Promise의 메서드로는 all, race, allSettled, reject, any, resolve가 있다.

Promise.all은 주어진 모든 Promise가 이행되거나, Promise 중 하나가 거부 될 때까지 대기하는 Promise를 반환한다.
fulfilled가 된다면, 매개변수로 제공한 Promise 각각의 이행 값을 모아 배열로 이행한다.
rejected가 되면 매개변수로 제공한 Promise 중 제일 먼저 거부된 사유를 사용한다.

Promise.race는 주어진 Promise들 중 하나라도 처리될 때까지 대기한다.
fulfilled가 되면, 매개변수로 제공한 Promise 중 제일 먼저 처리된 값으로 이행한다.
마찬가지로 rejected가 되면, 제일 먼저 거부된 사유를 사용한다.

Promise.allSettled는 주어진 Promise가 fulfilled나 rejected가 될 때까지 대기한다.
매개변수로 제공된 모든 Promise 각각의 상태와 값 또는 거부 사유를 모아 배열로 이행한다.

Promise.reject는 주어진 사유로 거부하는 Promise 객체를 반환한다.

Promise.any는 주어진 Promise 중 하나라도 이행하는 순간, 바로 그 Promise의 값으로 이행하는 새로운 Promise를 반환한다.

Promise.resolve는 주어진 값으로 이행하는 Promise 객체를 반환한다. 
이때 지정한 값이 then 블록을 실행 가능한 값인 경우 반환하는 Promise는 then 메서드를 따라가서 자신의 최종 형태를 결정한다.
그 외의 경우, 반환된 Promise는 주어진 값으로 이행한다.

어떤 값이 프로미스인지 아닌지 알 수 없는 경우, 보통 일일이 두 경우를 나눠서 처리하는 대신 Promise.resolve()로 값을 감싸서 항상 프로미스가 되도록 만든 후 작업하는 것이 좋다.

 

댓글