250x250
Notice
Recent Posts
Recent Comments
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- atlas
- await
- flutter
- jsonwebtoken
- sequelize
- certbot
- MYSQL
- wil
- TypeScript
- RDS
- EC2
- JavaScript
- AWS
- https
- double quote
- Node.js
- Find
- moment
- async
- clipBehavior
- TailwindCSS
- Nodejs
- mongoose
- mongodb
- css
- til
- single quote
- Express
- findByIdAndDelete
- nginx
Link
Archives
기억 휘발 방지소
[JavaScript] Promise 본문
728x90
반응형
Promise
Promise는 비동기 연산이 종료된 이후 결과를 알기 위해 사용하는 객체이다.
Callback Hell 때문에 ES6에서 도입한 또 다른 비동기 처리 패턴이다.
Promise 생성
- Promise는 new Promise()로 생성한다.
- 비동기 작업을 수행할 Callback 함수를 인자로 전달받아서 사용한다.
- new Promise에 전달되는 함수는 executor(실행자 혹은 실행함수)라고 부른다.
executor는 new Promise가 만들어질 때 자동으로 실행된다. - 인자로는 resolve와 reject를 받는다(resolve와 reject는 자바스크립트에서 자체 제공하는 Callback이다).
대신 executor에서 비동기 작업이 끝나면 바로 두 가지 Callback 중 하나를 실행한다. - resolve는 작업이 성공한 경우 호출할 Callback이다.
resolve(성공리턴값)은 then으로 연결된다. - reject는 작업이 실패한 경우 호출할 Callback이다.
reject(실패리턴값)은 catch로 연결된다.
const condition = true;
const promise = new Promise((resolve, reject) => {
if (condition) {
resolve("성공!");
} else {
reject("실패!");
}
});
promise
.then((msg) => {
console.log(msg); // 성공
})
.catch((error) => {
console.error(error);
});
Promise Chaining
Promise는 후속 처리 메서드를 체이닝해서 여러 개의 Promise를 연결할 수 있다. (이걸로 Callback Hell을 해결할 수 있다.)
new Promise((resolve, reject) => {
setTimeout(() => resolve(1), 1000);
})
.then((result) => {
console.log(result);
return result + 1;
})
.then((result) => {
console.log(result);
return result + 1;
})
.then((result) => {
console.log(result);
return result + 1;
});
위의 코드는 아래와 같은 순서대로 실행된다.
- 1초 후 Promise가 실행된다.
- 이후 첫 번째 then이 호출된다. 첫 번째 then의 리턴값을 두 번째 then에 전달하고
- 두 번째 리턴값을 세 번째 then으로 전달한다.
- 이런 과정이 계속 반복된다.
결과적으로 콘솔에는 1, 2, 3이 순서대로 출력된다.
728x90
반응형
'Web > JavaScript' 카테고리의 다른 글
[JavaScript] reduce() (0) | 2021.09.11 |
---|---|
[JavaScript] async/await (0) | 2021.09.05 |
[JavaScript] parseInt() vs Number() (0) | 2021.09.03 |
[JavaScript] 이벤트 루프 (0) | 2021.09.02 |
[JavaScript] 호출스택 (0) | 2021.08.31 |