[JavaScript] 자바스크립트 Promise
글 작성자: 망고좋아
반응형
🎯 Promise
- promise api는 비동기 api 중 하나이다.
- Task queue가 아닌 Job queue를 사용한다.
- Job queue는 Task queue보다 우선순위가 높다.
- Promise 처리가 setTimeout 처리보다 앞선다.
- 비동기 작업의 진행, 성공, 실패 상태를 표현한다.
- Pending : 진행상태 표시
- fulfilled : 성공
- rejected 실패
- Promise.prototype.then 체인을 이용해 비동기 처리 순서를 강제할 수 있다.
setTimeout(() => {
console.log("타임아웃 1");
}, 0);
Promise.resolve().then(() => console.log("프로미스1"));
setTimeout(() => {
console.log("타임아웃 2");
}, 0);
Promise.resolve().then(() => console.log("프로미스2"));
// 프로미스1
// 프로미스2
// 타임아웃 1
// 타임아웃 2
- Promise 처리가 setTimeout 처리보다 앞선다.
- 성공의 경우 .then()
- 실패의 경우 .catch()
📝 Promise 생성자
let promise = new Promise((resolve, reject) => {
if(Math.random() < 0.5) {
return reject("실패")
}
resolve(10);
})
- new Promise(callback)
- callback 함수는 (resolve, reject) 두 인자를 받으며 성공 시에는 resolve를 호출, 실패 시에는 reject를 호출한다.
📝 Promise 메서드
promise
.then(data => {
console.log("성공 : ", data);
})
.catch(e => {
console.log("실패 : ", e);
})
.finally(() => {
console.log("promise 종료");
})
- then() 메서드에 성공했을 때 실행할 콜백 함수를 인자로 넘긴다.
- catch() 메서드에 실패했을 때 실행할 콜백 함수를 인자로 넘긴다.
- finally() 메서드 성공/실패 여부와 상관없이 모두 실행할 콜백 함수를 인자로 넘긴다.
- then(callback1, callback2)로 callback1의 자리에 성공, callback2의 자리에 실패 메서드를 인자로 넘길 수 있다.
📝 Promise 메서드 체인
promise
.then(data => {
return fetchUser(data);
})
.then(user => {
console.log("user : ", user);
})
.catch(e => {
console.log("실패 : ", e);
})
- then/catch 메서드가 또 다른 promise를 리턴하여 비동기 코드에 순서를 부여한다.
- 이렇게 동일한 객체에서 메서드를 연결할 수 있는 것을 체이닝(chaining)이라 한다.
- 함수를 호출한 주체가 함수를 끝낸 뒤 자기 자신을 리턴하도록 하여 구현한다.
📝 Promise.resolve, Promise.reject
Promise
.resolve(10)
.then(console.log("Test"))
Promise
.reject('Error')
.catch(console.log("Test"))
- Promise.resolve 함수는 성공한 Promise를 바로 반환한다.
- Promise.reject 함수는 실패한 Promise를 바로 반환한다.
- 인위적으로 Promise 메서드 체인을 만들 수 있다.
- 비동기 코드를 진행해야 하는 상황 등에 유용하게 사용할 수 있다.
📝 Promise.all
Promise.all([
promise1,
promise2,
promise3,
])
.then(values => {
console.log("모두 성공 : ", values);
})
.catch(e => {
console.log("하나라도 실패 : ", e);
})
- 배열을 받아 모두 성공 시 각 Promise의 resolved 값을 배열로 반환한다.
- 하나의 Promise라도 실패할 시, 가장 먼저 실패한 Promise의 실패 이유를 반환한다.
🏷 요약
📕 Promise 생성 문법
var myPromise1 = new Promise(function(resolve, reject) {
resolve(1);
});
📕 Promise 이행(resolve)과 거부(reject)
myPromise1.then(); //이행
var myPromise2 = new Promise(function(resolve, reject) {
reject(1);
});
myPromise2.then();
반응형
'프로그래밍 > JavaScript' 카테고리의 다른 글
[JavaScript] 자바스크립트 async / await (0) | 2021.11.19 |
---|---|
[JavaScript] 자바스크립트 fetch (0) | 2021.11.19 |
[JavaScript] 자바스크립트 History API (0) | 2021.11.16 |
[JavaScript] 자바스크립트 변수의 유효범위, 렉시컬 환경 (0) | 2021.11.16 |
[JavaScript] 자바스크립트 블록레벨 스코프, 함수레벨 스코프 (0) | 2021.11.15 |
댓글
이 글 공유하기
다른 글
-
[JavaScript] 자바스크립트 async / await
[JavaScript] 자바스크립트 async / await
2021.11.19 -
[JavaScript] 자바스크립트 fetch
[JavaScript] 자바스크립트 fetch
2021.11.19 -
[JavaScript] 자바스크립트 History API
[JavaScript] 자바스크립트 History API
2021.11.16 -
[JavaScript] 자바스크립트 변수의 유효범위, 렉시컬 환경
[JavaScript] 자바스크립트 변수의 유효범위, 렉시컬 환경
2021.11.16