JS/JS
[JS] Promise Chaining 과 Promisification
OKKK굴
2023. 2. 23. 17:50
프라미스 체이닝과 프라미스화에 대해 다뤄보자.
1. Promise Chaining
Promise.then()함수가 Promise 객체를 반환하면 다시 .then 으로 동기화 할 수 있다.
여기서 중요한건 바로 .then을 이어가기 위해선 반드시 Promise 함수를 리턴해야한다는 것이다!
//📁일반적인 Promise
new Promise((res,rej)=>{
console.log("먼저실행됩니다.");
res(처리내역);
}).then((처리내역)=>{
console.log("나중에실행됩니다.");
//resolve()를 실행한 시점에 해당 함수가 실행되면서 동기화
});
//📁프라미스체이닝
new Promise((res,erj)=>{
res(처리내역1);
}).then((처리내역1)=>{
return new Promise((res)=>{
res(처리내역2);
});
}).then((처리내역2)=>{
return new Promise((res)=>{
res(처리내역3);
});
}).then((처리내역3)=>{
console.log("처리내역4 끝");
});
2) Promisification (프라미스화)
프라미스체이닝을 위해서 then함수에 프라미스 객체를 계속 생성하는 것이 너무 복잡하여 프라미스화 를 한다.
쉽게 말하면 promise를 함수처리 하여 사용한다는 이야기이다.
항상 잊지 말아야하는 것은 promise를 반환해야한다. 그래야 then을 쓸 수 있다.
<button id="testBtn">연속알람버튼</button>
<script>
//프라미스화 : promise 값을 함수로 보냄. promise를 반환
function setTimeAlretPromise(seconds=2){
return new Promise((res,rej)=>{
setTimeout(()=>{
alert(seconds+" 초 뒤 알람!");
res();//동기화하고싶은 시점에 써준다.
},seconds*1000)
});
}
//사용
testBtn.onclick=function(e){
setTimeAlretPromise(0)
.then((resMsg)=>{
return setTimeAlretPromise(1);
}).then((resMsg)=>{
return setTimeAlretPromise(2);
}).then((resMsg)=>{
return setTimeAlretPromise(3);
});
}
</script>