-
Pending(대기 중): 프로미스가 생성되었지만 아직 완료되지 않은 상태입니다. 비동기 작업이 진행 중이거나 아직 시작되지 않았을 때 이 상태가 됩니다.
-
Fulfilled(이행됨): 비동기 작업이 성공적으로 완료되어 프로미스의 결과값이 사용 가능한 상태입니다. 이때 프로미스는 한 번 이행된 상태로 변경되며, 이후 추가적인 상태 전이는 일어나지 않습니다.
-
Rejected(거부됨): 비동기 작업이 실패하거나 오류가 발생하여 프로미스가 거부된 상태입니다. 이때 프로미스는 한 번 거부된 상태로 변경되며, 이후 추가적인 상태 전이는 일어나지 않습니다.
프로미스의 상태 전이는 일반적으로 다음과 같은 방식으로 이루어집니다:
-
Pending(대기 중)에서 Fulfilled(이행됨): 프로미스가 성공적으로 완료되었을 때, resolve 함수가 호출되면 프로미스의 상태가 이행됨으로 변경됩니다.
-
Pending(대기 중)에서 Rejected(거부됨): 비동기 작업이 실패하거나 오류가 발생했을 때, reject 함수가 호출되면 프로미스의 상태가 거부됨으로 변경됩니다.
-
Fulfilled(이행됨) 또는 Rejected(거부됨) 상태에서 다른 상태로의 전이는 불가능합니다. 즉, 한 번 프로미스가 이행되거나 거부되면 그 이후 상태 전이는 일어나지 않습니다.
아래는 프로미스의 상태와 상태 전이 예제이며, 자바스크립트에서 프로미스를 사용할 때의 일반적인 패턴입니다.
// 비동기 작업을 수행하는 함수
function fetchData() {
return new Promise((resolve, reject) => {
// 비동기 작업 수행
// 성공하면 resolve 호출하여 프로미스 이행
// 실패하면 reject 호출하여 프로미스 거부
});
}
// 프로미스 사용
fetchData()
.then((data) => {
// 프로미스가 이행됐을 때의 동작
})
.catch((error) => {
// 프로미스가 거부됐을 때의 동작
});
프로미스를 사용하여 비동기 작업을 처리할 때, 상태와 상태 전이에 대한 이해는 매우 중요합니다. 이를 통해 프로미스를 효율적으로 활용하여 코드의 가독성과 유지보수성을 높일 수 있습니다.
더 자세한 내용은 아래의 참고 자료를 참고해주세요.
- MDN web docs - Promise
- JavaScript.info - Promises, async/await
- ECMAScript 6(ECMA-262)
- Axios - JavaScript Promise based HTTP client