Front/Javascript
[JavaScript] Promise 개념
JongHyun99
2021. 10. 24. 23:53
728x90
[JavaScript] Promise
Promise란 자바스크립트에서 비동기 처리를 이용한 패턴이다.
기존 비동기 처리에 이용하는 콜백 함수는 콜백헬 발생 시 가독성이 나쁘고, 예외처리가 힘든 단점이 있어 프로미스가 등장했다.
프로미스에 대해 구글의 설명을 보거나 강의 영상을 보면 설명이 꽤 난해하게 느껴진다.
그렇기에 쉽게 이해할 수 있도록 공부해보았다.
프로미스의 사용
프로미스는 일단 선언과 실행부로 나누어 사용한다.
각 부분의 구조를 살펴보면
선언부
// Promise 객체의 생성
const promise = new Promise((resolve, reject) => {
// 비동기 작업을 수행한다.
if (/* 비동기 작업 수행 성공 */) {
resolve('result');
}
else { /* 비동기 작업 수행 실패 */
reject('failure reason');
}
});
위와 같이 작성되어 있다.
선언부 구조가 new Prmoise라는 객체와 함수 인자로 resolve와 reject 함수를 받고있다는 것만 기억하자.
(해당 글에서는 기본적인 이해를 위한 글이므로 race나 all같은 함수는 다른 메뉴얼을 찾아보자.)
실행부
promise.then(function (text) {
console.log(text);
}, function (error) {
console.error(error);
});
객체에 .then 메서드를 이용하여 응답 결과를 호출한다.
then(함수1, 함수2)라고 생각하자.
함수1에는 resolve의 매개변수가, 함수2에는 reject의 매개변수가 할당된다.
위 실행부는 promise.then(resolve의 매개변수, reject의 매개변수) 로 해석할 수 있다.
promise는 조건에 따라 성공, 실패 예외 반환 등을 할 수 있는 비동기 메소드이다.
Ajax와 비슷한 형태를 가지고 있다.
체인 구성
//result의 값으로 1이 입력된다면
promise.then(function (result) {
console.log(result); //출력: 1
return result*2 //2
}).then(function(result) {
//첫 번째 체인
console.log(result); //출력: 2
return result*2; //4
}).then(function(result) {
//두 번째 체인
console.log(result); //출력: 4
return result*2; // 8
});
결과에 한번더 then메소드를 붙여 처리할 수 있다.
동작하는 구조를 쉽게 이해하기 위해 단순하게 다루었기 때문에 부족할 수 있다.
더 자세하고 깊이있는 내용은 다른 블로그나 스펙을 참고하길 바란다.