Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Data Structure
- 리덕스 어려워
- 코드스테이츠
- JavaScript
- 고객 세분화
- RDS 오류
- Java Script
- 자바스크립트
- html
- reactjs code snippets
- ERROR 2003
- code states
- 마케팅 분석
- SR
- Node.js
- 코드 스테이츠
- 데이터리안
- Algorithm
- css
- SR완료
- toy problem
- Date Structure
- 서버 배포
- 맥북 git 에러
- worflow
- Pre코스
- first project
- nvm
- Class
- 초보 개발자
Archives
- Today
- Total
Nathan's 개발 일지
Promise란 무엇일까? 본문
오늘 배운 것
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