Nathan's 개발 일지

Promise란 무엇일까? 본문

개발 공부 정리/JavaScript

Promise란 무엇일까?

Nathan.YT 2021. 2. 1. 15:15

오늘 배운 것

Promise?

 

“A promise is an object that may produce a single value some time in the future”

 

프로미스란? 언젠가 사용하게 될 값을 생산해내는 객체이다. (ES6에 추가된 친구이다.)

  • 값을 얻는다(resolved) or 값을 얻지 못했지만 이유를 얻게 된다(rejected)

프로미스는 3가지 상태 중 하나를 갖게 되는데 아래와 같다.

 

  • 대기(pending): 이행하거나 거부되지 않은 초기 상태.
  • 이행(fulfilled): 연산이 성공적으로 완료됨.
  • 거부(rejected): 연산이 실패함.

 

Promise는 pending된 상태 아니면, settled 상태라고 말 한다. 즉, resolved or rejected 상태인 것이다. 한번 settled 상태가 되고나면, Promise는 다시 settled가 될 수 없다. (settled상태인 Promise는 불변성을 갖는다.)

 

Promise를 생성하는 함수만이 Promise의 상태를 알거나 접근이 가능하다.

 

const wait = time => new Promise((resolve) => setTimeout(resolve, time));

wait(3000).then(() => console.log('Hello!')); // 'Hello!'

 

Promise는 .then() 메서드를 정의해야한다. resolved 된 이유를 전달 받을 콜백을 사용하려면 .then()이 필요하다. 반대인 rejected 된 이유를 전달 받을 콜백은 .catch()가 필요하다.

 

Q. 1
Promise 실행함수가 가지고 있는 두 개의 파라미터,
resolve, reject는 각각 무엇을 의미하나요?
A. 1
비동기 작업은 성공 혹은 실패한다.
비동기 작업은 요청하는 쪽과 처리하는 쪽이 구분되어있다.
프로미스의 resolve, reject는 비동기 작업의 처리과정에서 성공/실패를 구분하는 방법이다.

Q. 2
resolve, reject함수에는 인자를 넘길 수 있습니다.
이때 넘기는 인자는 어떻게 사용할 수 있나요?
A. 2
첫번째 .then 파라미터로 넣을 수 있다.
그 다음 then에 첫번째 return data가 들어간다.

Q. 3
new Promise()를 통해 생성한 Promise 인스턴스에는 어떤 메소드가 존재하나요?
각각은 어떤 용도인가요?
A. 3
.catch(): reject에 들어간 데이터를 받는 메서드.
.then(): resolve에 들어간 데이터를 받는 메서드.
.finally(): Promise 가 resolve 되던 reject 되던 상관없이 지정된 함수를 실행하는 메서드.
Q. 4
Promise의 세가지 상태는 각각 무엇이며, 어떤 의미를 가지나요?
A. 4
대기(pending): 이행하거나 거부되지 않은 초기 상태.
이행(fulfilled): 연산이 성공적으로 완료됨.
거부(rejected): 연산이 실패함.

 

Promise 체이닝 시, fulfilled와 rejected 모든 경우에 대하여 콜백을 가지게 코드를 짜는 것이 중요하다. 모든 Promise 체이닝은 .catch()로 끝내는 것을 추천한다.

// handleSuccess()의 오류를 처리해 줄 함수가 없음.
save().then(
  handleSuccess,
  handleError
);

// handleSuccess()의 오류 발생시 에러 헨들러 실행
save()
  .then(handleSuccess)
  .catch(handleError)
;

 

'개발 공부 정리 > JavaScript' 카테고리의 다른 글

OOP (객체 지향적 프로그래밍)  (0) 2021.01.14
자바스크립트 ES6 사용법 정리  (0) 2021.01.08
Comments