일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- boolean
- align-content
- 비교연산자
- 함수표현식
- if else
- flex-direction
- 함수선언식
- justify-content
- 화살표함수
- 반복문
- 논리연산자
- properties
- frontend
- typeof
- flex
- 기초
- 함수
- 프론트엔드
- 타입
- for of
- 조건문
- javascript
- 변수
- 속성
- ELSE
- Methods
- 문자열
- for
- for in
- flex-wrap
- Today
- Total
하얀 코딩
[JavaScript - 22] Promise.prototype.then(), catch(), finally() 본문
[JavaScript - 22] Promise.prototype.then(), catch(), finally()
whitecoding 2023. 1. 12. 00:56본 내용은 Promise 개념의 내용을 포함하고 있지 않습니다.
Promise를 모른다면 다음 사이트에서 Promise의 개념을 이해하고 보시길 바랍니다.
[JavaScript - 21] Promise
Promise 비동기로 작동하는 코드를 제어할 수 있는 다른 방법 중 Promise를 활용하는 방법이 있습니다. Promise는 class이기 때문에 new 키워드를 통해 Promise 객체를 생성합니다. 또한 Promise는 비동기 처
white120.tistory.com
Promise.prototype.then()
executor(실행자)에 작성했던 코드들이 정상적으로 처리가 되었다면 resolve 함수를 호출하고 then()으로 접근할 수 있습니다.
또한 then() 안에서 리턴한 값이 Promise면 Promise의 내부 프로퍼티 result를 다음 then() 의 콜백 함수의 인자로 받아오고, Promise가 아니라면 리턴한 값을 then()의 콜백 함수의 인자로 받아올 수 있습니다.
아래의 예시를 살펴보면서 동작 방식을 확인해보세요.
let promise = new Promise((resolve, reject) => {
resolve("성공");
});
promise.then(value => {
console.log(value);
// "성공"
})
Promise.prototype.catch()
executor에 작성했던 코드들이 에러가 발생했을 경우에는 reject 함수를 호출하고 catch()로 접근할 수 있습니다.
let promise = new Promise(function(resolve, reject) {
reject(new Error("에러"))
});
promise.catch(error => {
console.log(error);
// Error: 에러
})
Promise.prototype.finally()
executor에 작성했던 코드들의 정상 처리 여부와 상관없이 .finally 메서드로 접근할 수 있습니다.
let promise = new Promise(function(resolve, reject) {
resolve("성공");
});
promise
.then(value => {
console.log(value);
// "성공"
})
.catch(error => {
console.log(error);
})
.finally(() => {
console.log("성공이든 실패든 작동!");
// "성공이든 실패든 작동!"
})
Promise chaining
Promise chaining가 필요하는 경우는 비동기 작업을 순차적으로 진행해야 하는 경우입니다.
Promise chaining이 가능한 이유는 then(), catch(), finally() 의 메서드들은 Promise를 반환하기 때문입니다.
따라서 then()을 통해 연결할 수 있고, 에러가 발생할 경우 catch() 로 처리하면 됩니다.
let promise = new Promise(function(resolve, reject) {
resolve('성공');
...
});
promise
.then((value) => {
console.log(value);
return '성공';
})
.then((value) => {
console.log(value);
return '성공';
})
.then((value) => {
console.log(value);
return '성공';
})
.catch((error) => {
console.log(error);
return '실패';
})
.finally(() => {
console.log('성공이든 실패든 작동!');
});
'JavaScript' 카테고리의 다른 글
[JavaScript - 24] async / await (0) | 2023.01.26 |
---|---|
[JavaScript - 23] Promise API (0) | 2023.01.26 |
[JavaScript - 21] Promise (0) | 2023.01.11 |
[JavaScript - 20] 타이머 API (0) | 2023.01.11 |
[JavaScript - 19] 동기 / 비동기 (0) | 2023.01.11 |