Promise
2021. 3. 21. 17:00ㆍ기타
반응형
Promise란
Promise의 개념
Promise는 자바스크립트 비동기 처리에 사용되는 객체입니다.
jQery ajax 코드
function getData(callbackFunc) {
$.get('url 주소/products/1', function(response) {
callbackFunc(response); // 서버에서 받은 데이터 response를 callbackFunc() 함수에 넘겨줌
});
}
getData(function(tableData) {
console.log(tableData); // $.get()의 response 값이 tableData에 전달됨
});
Promise 코드
function getData(callback) {
// new Promise() 추가
return new Promise(function(resolve, reject) {
$.get('url 주소/products/1', function(response) {
// 데이터를 받으면 resolve() 호출
resolve(response);
});
});
}
// getData()의 실행이 끝나면 호출되는 then()
getData().then(function(tableData) {
// resolve()의 결과 값이 여기로 전달됨
console.log(tableData); // $.get()의 reponse 값이 tableData에 전달됨
});
위의 두 코드를 이용해 API가 실행되면 서버에 요청을 보냅니다. 그런데 jQuery ajax의 경우에는 서버에서 데이터를 받아오기도 전에 마치 데이터를 받은 것 처럼 화면에 데이터를 표시하려고 하면 오류가 발생하거나 빈 화면이 나타납니다. 이러한 문제점을 해결하기 위해 Promise가 있습니다.
Promise의 3가지 상태
- Pending(대기): 비동기 처리 로직이 아직 완료되지 않은 상태
- Fullfilled(이행): 비동기 처리가 완료되어 프로미스 결과 값을 반환해준 상태
- Rejected(실패): 비동기 처리가 실패하거나 오류가 발생한 상태
여러 개의 Promise 연결
Promise의 특징 중 하나는 여러 개의 Promise를 연결하여 사용할 수 있다는 점입니다.
function getData() {
return new Promise({
// ...
});
}
// then() 으로 여러 개의 프로미스를 연결한 형식
getData()
.then(function(data) {
// ...
})
.then(function() {
// ...
})
.then(function() {
// ...
});
Promise의 에러 처리
then()의 두 번째 인자로 에러를 처리하는 방법
getData().then(
handleSuccess,
handleError
);
catch()를 이용하는 방법
getData().then().catch();
Promise의 에러 처리를 하는 방법에는 catch()를 사용하는 방법이 권장되고 있습니다. then을 사용할 경우, 에러 처리 코드를 포함하는 then()에 문제가 발생하면 에러 처리를 하지 못 하고 오류가 발생합니다. 하지만 catch를 사용하게 되면 정상적으로 오류 처리를 할 수 있습니다.
참고: https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
반응형