Promise의 상태(state)와 상태 전이 과정

Promise는 자바스크립트에서 비동기 작업을 다루는 데 사용되는 객체입니다. Promise는 세 가지 상태를 가지며, 이 상태들은 상태 전이 과정을 통해 변경됩니다. 이번 블로그 포스트에서는 Promise의 상태와 상태 전이 과정에 대해 알아보겠습니다.

Promise의 상태

Promise는 다음과 같은 세 가지 상태를 가집니다.

  1. 대기(pending): Promise 객체가 생성되었지만 아직 결과가 사용 가능하지 않은 상태입니다. 비동기 작업이 진행 중일 때 대기 상태에 있습니다.
  2. 이행(fulfilled): 비동기 작업이 성공적으로 완료되어 결과가 사용 가능한 상태입니다.
  3. 거부(rejected): 비동기 작업이 실패하거나 예외가 발생하여 결과를 사용할 수 없는 상태입니다.

상태 전이 과정

Promise는 다음과 같은 상태 전이 과정을 거칩니다.

  1. 대기(pending) -> 이행(fulfilled): Promise 객체가 생성된 후 then() 메소드를 사용해서 성공 콜백 함수를 등록하면, 대기 상태에서 이행 상태로 전이됩니다. 이때 성공 콜백 함수에는 비동기 작업의 결과가 전달됩니다.
  2. 대기(pending) -> 거부(rejected): Promise 객체가 생성된 후 catch() 메소드를 사용해서 실패 콜백 함수를 등록하면, 대기 상태에서 거부 상태로 전이됩니다. 이때 실패 콜백 함수에는 비동기 작업 중 발생한 예외가 전달됩니다.
  3. 이행(fulfilled) -> 대기(pending): 이행 상태의 Promise 객체에 대해 다시 then() 메소드를 호출하면, 이행 상태를 유지한 채로 새로운 Promise 객체가 생성됩니다.
  4. 이행(fulfilled) -> 거부(rejected): 이행 상태의 Promise 객체에 대해 다시 catch() 메소드를 호출하면, 이행 상태를 거부 상태로 전이시키는 새로운 Promise 객체가 생성됩니다.
  5. 거부(rejected) -> 대기(pending): 거부 상태의 Promise 객체에 대해 다시 then() 메소드를 호출하면, 거부 상태를 유지한 채로 새로운 Promise 객체가 생성됩니다.
  6. 거부(rejected) -> 이행(fulfilled): 거부 상태의 Promise 객체에 대해 다시 catch() 메소드를 호출하면, 거부 상태를 이행 상태로 전이시키는 새로운 Promise 객체가 생성됩니다.

이러한 상태 전이 과정을 이용하면 비동기 작업의 성공 또는 실패에 따라 다양한 처리를 할 수 있습니다. Promise는 자바스크립트에서 비동기 작업을 보다 효율적으로 다룰 수 있는 강력한 도구입니다.