Promise
자바스크립트 비동기 처리에 사용되는 객체
주로 서버에서 받아온 데이터를 화면에 표시할 때 사용
promise 처리 흐름 출처=> MDN
function getData(callbackFunc) {
$.get('url 주소/product/1', function(response) {
callbackFunc(response); //서버에서 받은 데이터 response를 callbackFunc() 함수에 넘겨줌
});
}
getData(function(tableData) {
console.log(tableData); //$.get()의 response 값이 tabelaData에 전달됨
});
/*************Promise 적용***************/
function getData(callback) {
//new Promise() 추가
return new Promise(function(resolve, reject){
$.get('url 주소/product/1', function(response) {
//데이터를 받으면 resolve() 호출
resolve(response);
});
});
}
//getData() 의 실행이 끝나면 호출되는 then()
getData().then(function(tableData) {
//resolve()의 결과 값이 여기로 전달됨
console.log(tableData); //$.get() 의 response 값이 tableData에 전달됨
});
new Promise(); //매서드 호출하면 대기(Pending) 상태가 됨
// new Promise() 메서드를 호출할 때 콜백 함수 선언 가능, 콜백 함수 인자=> resolve, reject
new Promise(function(resolve, reject) {
//...
});
*promise의 "이행" 상태를 다르게 표현하면 -> "완료"
//resolve를 실행하면 이행(Fulfilled) 상태가 됨
new Promise(function(resolve, reject) {
resolve();
});
//이행 상태 -> then() 이용하여 처리 결과 값 받을 수 있음
function getData() {
return new Promise(function(resolve, reject) {
let data = 300;
resolve(data);
}
}
//resolve() 결과 값인 data를 resolvedData로 받음
getData().then(function(resolvedData) {
console.log(resovedData); //300
});
//콜백 함수 인자 reject 호출 하면 -> 실패(Rejected) 상태
new Promise(function(resolve, reject) {
reject();
});
//catch() : 실패 상태의 실패한 이유(실패 처리의 결과 값) 받을 수 있음
function getData() {
return new Promise(function(resolve, reject) {
reject(new Error("Failedddddddd"));
});
}
//reject()의 결과값 Error를 Errrrror에 받음
getData().then().catch(function(Errrrror) {
console.log(Errrrror); //Error: Failedddddddd
});
getData(userInfo)
.then(parseValue)
.then(auth)
.then(display)
//userInfo => 사용자 정보가 담긴 객체
//parseValue, auth, display => 각각 promise를 변환해주는 함수
let userInfo = {
id: 'rkhong',
pw: '*****'
};
function parseValue() {
return new Promise({
//...
});
}
function auth() {
return new Promise({
//...
});
}
function display() {
return new Promise({
//...
});
}
getData().then(function() {
//...
}, function(error) {
console.log(error);
});
getData().then().catch(function(error) {
console.log(error);
});
=> then(), catch()는 promise의 reject() 메서드가 호출되어 실패 상태된 경우 실행됨.
.
.
.
.
Reference
https://joshua1988.github.io/web-development/javascript/promise-for-beginners/