[elice] 프로미스(Promise)

yuna·2023년 6월 6일
0

elice

목록 보기
10/14
post-thumbnail

🐰 프로미스

프로미스(Promise) 는 콜백 패턴의 단점을 개선하기 위해 ES6에 도입되었다.
프로미스는 Promise 생성자 함수를 new 연산자와 함께 호출하여 객체를 생성한다.
Promise 생성자 함수는 비동기 처리를 수행할 콜백 함수를 인수로 전달 받으며, 이 콜백 함수는 resolve, reject 함수를 인수로 전달받는다.

const promise = new Promise((resolve, reject) => {
  // 비동기 처리 성공시
  resolve();

  // 비동기 처리 실패시
  reject();
});

🐰 프로미스- 상태 ⭐

Promise는 비동기 처리의 진행 상태(State)를 나타내는 정보를 갖는다.
• pending (비동기 처리가 아직 수행되지 않은 상태)
• fulfilled (비동기 처리가 수행되어 성공한 상태)
• rejected (비동기 처리가 수행되어 실패한 상태)

생성된 직후의 프로미스는 pending 상태이며, 비동기 처리 결과에 따라 상태가 변경된다.
• 비동기 처리 성공 : resolve 함수를 호출해 fulfilled 상태로 변경
• 비동기 처리 실패 : reject 함수를 호출해 rejected 상태로 변경

🐰 후속 처리 메서드 (then)

Promise.prototype.then 메서드는 처리가 완료되었을 때 후속 처리를 하는 메서드이며, 두 개의 콜백 함수를 인수로 전달 받는다.

  1. 첫 번째 콜백 함수는 프로미스가 fulfilled 되면 호출되며, 처리 결과를 인수로 전달 받는다.
  2. 두 번째 콜백 함수는 프로미스가 rejected 되면 호출되며, 에러를 인수로 전달받는다.

then 메서드는 언제나 프로미스 객체를 반환한다.

🐰 후속 처리 메서드 (catch, finally)

Promise.prototype.catch 메서드는 한 개의 콜백 함수를 전달받으며, 해당 콜백 함수는 프로미스가 rejected 상태인 경우만 호출된다.(어떤 상태든 무조건 실행)
Promise.prototype.finally 메서드는 한 개의 콜백 함수를 전달받으며, 프로미스 상태와 상관없이 무조건 한 번 호출된다. 처리 결과와 무관하게 공통적으로 처리해야 할 내용이 있을 때 사용한다.

🐰 프로미스 체이닝

then, catch, finally 같은 후속 처리 메서드는 프로미스를 반환하기 때문에 연속적으로 호출할 수 있다. 이처럼 연속해서 프로미스를 호출하는 것을 프로미스 체이닝(promise chaining)이라고 한다.
후속 처리 메서드의 콜백 함수가 프로미스가 아닌 값을 반환하더라도 그 값을 암묵적으로 resolve 또는 reject하여 프로미스를 생성해 반환한다.

0개의 댓글