Promise 패턴을 사용하면 1. 비동기 작업들을 순차적으로 진행하고나, 병렬로 진행하는 등의 제어가 수월해지고 2. 코드의 가독성이 좋아진다. 또한 내부적으로 예외처리에 대한 구조가 탄탄해, 오류 발생 시 3. 오류 처리에 대해 보다 직관적으로 관리해줄 수 있는 장점이 있다.
Promise는 비동기 처리가 성공(fulfilled)했는지, 실패(rejected)했는지 등의 상태 정보와 처리 종료후 실행될 콜백함수(then, catch)를 담고 있는 객체이다.
Promise는 주로 서버에서 받아온 데이터를 화면에 표시할 때 사용하며, 일반적으로 웹 애플리케이션을 구현할 때 서버에서 데이터를 요청하고 받아오기 위해 다음과 같이 사용한다.
function getData(callback) {
// new Promise()
return new Promise(function (resolve, reject) {
$.get('url 주소/products/1', function (response) {
resolve(response); // 데이터를 받으면 resolve()
});
});
}
// getData()의 실행이 끝나면 호출되는 then()
getData().then(function (data) {
// resolve()의 결과 값이 전달된다.
console.log(data); // $.get()의 reponse 값이 tableData에 전달됨
});
new Promise();
new Promise(function(resolve, reject){
//...
});
new Promise(function(resolve, reject){
resolve();
});
function getData(){
return new Promise(function(resolve, reject){
var data = 100;
resolve(data);
});
}
getData().then(function(resolvedData){
console.log(resolvedData);
});
//=> 100
new Promise(function(resolve,reject){
reject();
});
function getData(){
return new Promise(function(resolve,reject){
reject(new Error("Request is failed"));
});
}
getData.then().catch(function(err){
console.log(err);
});
//=> "Request is failed"
function getData(){
return new Promise(function(resolve,reject){
resolve('hi');
});
}
getData.then(function(result){
console.log(result);
throw new Error("Error in then() 인지 못하는 오류");
},function(err){
console.log('then error : ',error);
});
function getData(){
return new Promise(function(resolve, reject){
$.get(url,function(response){
if(response){
resolve(response);
}
reject(new Error("Request is failed"));
});
});
}
getData().then(function(data){
console.log(data);
}).catch(function(err){
console.log(err);
})
function getData(){
return new Promise({
//...
});
}
getData().then(function(data){
//...
}).then(function(){
//...
}).then(function(){
//...
});
var userInfo = {
id: 'test@xx.xxx',
pw: '11111'
};
function parseValue(){
return new Promise({
//...
});
}
function auth(){
return new Promise({
//...
});
}
function display(){
return new Promise({
//...
});
}