Promise 이전에 복잡한 비동기 로직을 callback 함수로 구현하는 경우,
callback속에 callback, 그 속에 다시 callback... 식으로 코드가 엄청 복잡해져서 callback hell으로 불리었음
비동기 메서드에서 동기 메서드처럼 값을 바로 받고 싶을 때, 미래의 어떤 시점에 결과를 제공하겠다는 뜻으로 promise객체를 반환한다.
요즘 나오는 라이브러리 중 비동기는 return 값이 거의 promise임.
<!DOCTYPE html>
<html lang='ko'>
<head>
<meta charset='UTF-8'>
<title>Document</title>
</head>
<body>
<script>
// Promise 짱 중요, 다행인건 개발자가 Promise를 직접 만들 일은 거의 없음
// 잘 사용하기 위해서 이해가 필수!
// Promise 이전에 복잡한 비동기 로직을 callback 함수로 구현하는 경우
// callback속에 callback, 그 속에 다시 callback... 식으로
// 코드가 엄청 복잡해져서 callback hell으로 불리었음
// promise가 사용될 때는 return 값이 promise일 때 - 비동기를 사용할 때 쓴다.
// 제대로 끝났을 때 실행되는 것이 then, 에러 발생시 실행되는 것이 catch
// 요즘 나오는 라이브러리 중 비동기는 return 값이 거의 promise임.
let f_promise = function(p_sec){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
if(p_sec >= 3000){
resolve("잘났다");
}else{
var v_error = new Error("에러객체생성");
reject(v_error);
}
}, p_sec);
});
}
f_promise(3000).then((p_rslt)=>{
console.log(p_rslt);
}).catch((err)=>{
console.log(err);
});
f_promise(2000).then((p_rslt)=>{
console.log(p_rslt);
}).catch((err)=>{
console.log(err);
});
//값이 결정된 시점에 resolve로 넘기고 에러가 나면 reject로 넘긴다.
//return값이 promise면 then이나 catch만 쓰면 된다.
//then일 때는 resolve, catch(에러발생시)는 reject가 실행된다.
/* f_promise().then((p_rslt)=>{ //then 성공했을 때, catch 실패했을 때
alert(p_rslt);
}).catch((p_rslt)=>{
alert("에러"+p_rslt);
}).finally(()=>{
alert("무조건 실행되어요");
}) */
</script>
</body>
</html>