문제
웹의 API 중에 setTImeout은 비동기적으로 움직이기 때문에 함수의 실행을 했을 때 절차적으로 읽지를 못하는 문제가 생긴다.
예를 들어 다음 함수의 결과는 second -> first이다
function call(){
settimeout(()=>{
console.log("first")
},2000)
console.log("second")
}
해결
이를 해결하기 위해 호출 할 때 함수를 콜백지옥으로 함수가 실행되면 다음 함수가 실행되는 코드를 짜야 하는 한계가 있다. 이를 보여주면 다음과 같다.
function getFlightTicket(callback){
setTimeout(()=>{
callback()
},2000)
}
undefined
getFlightTicket(()=>{
console.log("first")
getFlightTicket(()=>{
console.log("second")
getFlightTicket(()=>{
console.log("third")
})
})
})
undefined
VM83:3 first
VM83:6 second
VM83:9 third
문제
여기서 문제를 함수를 호출하는 모습이 굉장히 지저분하다는 것을 알 수 있다. 이를 해결하는 것이 Promise
해결
선언
1. return 에 promise 함수를 호출
2. promise 함수를 호출하면 인자에 resolve가 callback이 되고 또 다른 인자로 reject를 지닌다.
3. 그리고 마지막으로 resolve()를 호출하면 끝
호출
1.함수를 호출하고
2.then 매서드를 호출( then 매서드를 호출함으로써 callback 함수의 값을 만듦)
function getFlightTicket(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve()
},1000)
})
}
undefined
getFlightTicket().then(()=>{
console.log("first")
return getFlightTicket()
})
.then(()=>{
console.log("second")
return getFlightTicket()
})
.then(()=>{
console.log("third")
return getFlightTicket()
})
Promise {<pending>}
VM1115:3 first
VM1115:7 second
VM1115:12 third
'Javascript' 카테고리의 다른 글
callback vs Promise vs await (0) | 2021.11.29 |
---|---|
정규식으로 이메일 유효성 검사하기 (0) | 2021.11.08 |
제이쿼리 css 추가 하기 & animate 넣기 (0) | 2021.11.04 |
바닐라 JS 메인 사진에 랜덤하게 사진 넣기 (0) | 2021.10.28 |
jQuery 기본 문법 이해 (0) | 2021.10.28 |