2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

비동기 프로그래밍에서 'promise'의 상태는 어떻게 변화하나요?

_____
Q: 비동기 프로그래밍에서 'promise'의 상태는 어떻게 변화하나요?

A: Promise의 상태는 세 가지 단계(또는 상태)를 거쳐 변화합니다.

1. Pending (대기 상태)
- Promise가 생성된 직후 초기 상태입니다.
- 비동기 작업이 아직 완료되지 않은 상태로, 결과도 없고 에러도 없는 미완료 상태입니다.
2. Fulfilled (이행 상태)
- 비동기 작업이 성공적으로 완료되어 결과 값을 갖게 된 상태입니다.
- 이 상태가 되면 `then()`에 등록된 성공 콜백이 호출됩니다.

3. Rejected (거부 상태)
- 비동기 작업이 실패하여 에러가 발생한 상태입니다.
- 이 상태가 되면 `catch()` 또는 `then()`의 실패 콜백(error handler)이 호출됩니다.

이 상태 변화는 한 방향으로만 진행되며, 한 번 `fulfilled` 또는 `rejected` 상태가 되면 다시 변경되지 않습니다. 즉, promise는 불변의 결과를 갖는 단일 성공/실패 상태를 나타냅니다.
<a href='https://sangseek.com/sangseeks/비동기 프로그래밍/ko'>비동기 프로그래밍</a>에서 'Promise'는 JavaScript에서 <a href='https://sangseek.com/sangseeks/비동기 작업/ko'>비동기 작업</a>의 완료 또는 실패를 나타내는 객체입니다. Promise는 세 가지 상태를 가질 수 있으며, 이 상태는 비동기 작업의 진행 상황을 나타냅니다. 이 세 가지 상태는 다음과 같습니다: 1. 대기(<a href='https://sangseek.com/sangseeks/pending/ko'>pending</a>) : Promise가 생성된 직후의 상태입니다. 이 <a href='https://sangseek.com/sangseeks/상태에/ko'>상태에</a>서는 비동기 작업이 아직 완료되지 않았으며, 결과를 기다리고 있는 상태입니다. 이 상태에서는 Promise가 성공적으로 완료될 수도 있고, 실패할 수도 있습니다. 2. 이행(fulfilled) : 비동기 작업이 성공적으로 완료되었을 때의 상태입니다. 이 상태에서는 Promise가 결과 값을 가지고 있으며, 이 결과 값은 `then()` 메서드를 통해 접근할 수 있습니다. 이행 상태로 전환되면, Promise는 더 이상 상태를 변경하지 않으며, 이후에 추가된 `then()` 메서드는 이행된 결과 값을 반환합니다. 3. 거부(<a href='https://sangseek.com/sangseeks/rejected/ko'>rejected</a>) : 비동기 작업이 실패했을 때의 상태입니다. 이 상태에서는 Promise가 오류 정보를 가지고 있으며, 이 오류 정보는 `catch()` 메서드를 통해 접근할 수 있습니다. 거부 상태로 전환되면, Promise는 더 이상 상태를 변경하지 않으며, 이후에 추가된 `catch()` 메서드는 거부된 이유를 반환합니다. 상태 변화의 흐름 Promise의 상태는 다음과 같은 흐름으로 변화합니다: - 대기(pending) → 이행(fulfilled) : 비동기 작업이 성공적으로 완료되면, Promise는 이행 상태로 전환됩니다. 이때, `resolve(value)` 함수를 호출하여 결과 값을 전달합니다. - 대기(pending) → 거부(rejected) : 비동기 작업이 실패하면, Promise는 거부 상태로 전환됩니다. 이때, `reject(error)` 함수를 호출하여 오류 정보를 전달합니다. 예제 아래는 Promise의 상태 변화 과정을 보여주는 간단한 예제입니다: ```javascript const myPromise = new Promise((resolve, reject) => { const success = true; // 비동기 작업의 성공 여부를 나타내는 변수 <a href='https://sangseek.com/sangseeks/setTimeout/ko'>setTimeout</a>(() => { if (success) { resolve("작업이 성공적으로 완료되었습니다."); // 이행 상태로 전환 } else { reject("작업이 실패했습니다."); // 거부 상태로 전환 } }, 1000); // 1초 후에 비동기 작업 완료 }); myPromise .then(result => { console.log(result); // 이행된 결과 출력 }) .catch(error => { console.error(error); // 거부된 이유 출력 }); ``` 위의 예제에서 `myPromise`는 처음에 대기 상태로 시작합니다. 1초 후에 비동기 작업이 완료되면, 성공 여부에 따라 이행 또는 거부 상태로 전환됩니다. 이행 상태로 전환되면 `then()` 메서드가 호출되어 결과가 출력되고, 거부 상태로 전환되면 `catch()` 메서드가 호출되어 오류가 출력됩니다. 결론 Promise는 비동기 프로그래밍에서 작업의 상태를 관리하는 중요한 도구입니다. Promise의 상태 변화는 대기, 이행, 거부의 세 가지로 나뉘며, 이를 통해 비동기 작업의 결과를 효과적으로 처리할 수 있습니다. 이러한 상태 변화는 비동기 작업의 성공 또는 실패를 명확하게 나타내며, 코드의 가독성과 <a href='https://sangseek.com/sangseeks/유지보수성/ko'>유지보수성</a>을 높이는 데 기여합니다.
작성자: 박예린 [비회원] | 작성일자: 1년 전 2024-09-12 16:03:44
조회수: 207 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.