지난 포스팅에 이어, 자바스크립트의 비동기처리로 인한 문제점 해결을 도와주는 방법인 Promise
에 대해 공부를 해보도록 하겠습니다.
Promise
는 미래에 성공하거나 실패할만한 값을 가지는 비동기 연산을 돕는 객체입니다. 또한 이 Promise
객체는 "대기", "이행", "실패" 세가지 상태를 갖습니다.
<center>MDN</center>
대기 중인 Promise
는 값과 함께 이행이 될 수도 실패 될 수도 있습니다. 이렇게 이행이나 실패 될 경우 Promise
의 then()
메서드로, 실패한 경우 catch()
메서드로 그 값이 전달되게 됩니다.
Promise.resolve(value)
는 결괏값이 value
인 이행 상태 Promise
를 생성하며, Promise.reject(error)
는 결과값이 error
인 거부 상태 Promise
를 생성합니다.
예제를 보면서 다뤄보도록 하겠습니다
const promiseResolve = Promise.resolve('성공')
const promiseReject = Promise.reject('실패')
promiseResolve
.then((resolve) => {
console.log('1회', resolve)
return promiseResolve
})
.then((resolve) => {
console.log('2회', resolve)
return promiseResolve
}).then((resolve) => {
console.log('3회', resolve)
return promiseResolve
})
코드 실행 결과
1회 성공
2회 성공
3회 성공
▹Promise {<fulfilled>: '성공'}
이번에는 2회 째 리턴 값으로 promiseReject
를 넣어보겠습니다.
promiseResolve
.then((resolve) => {
console.log('1회', resolve)
return promiseResolve
})
.then((resolve) => {
console.log('2회', resolve)
return promiseReject
}).then((resolve) => {
console.log('3회', resolve)
return promiseResolve
})
코드 실행 결과
1회 성공
2회 성공
▹Promise {<rejected>: '실패'}
코드 실행 결과 2회까지만 성공을 하고 이후 실패를 하는 것을 확인할 수 있습니다.
그렇다면 마지막으로 reject
리턴시 catch()
메서드를 사용하면 결과 값이 어떻게 출력이 되는지 확인을 해보도록 하겠습니다.