JavaScript의 비동기 처리 Promise(2)

마자요·2023년 12월 7일
0

Promise로 비동기 처리 연결하기

비동기 처리 여러 개를 연결해서 순차적으로 실행하려면 성공 콜백 함수가 Promise 객체를 반환하도록 만듭니다.

function buyAsync(myMoney){
    return new Promise(function(resolve,reject) {
        
        setTimeout(function() {
            var payment = parseInt(prompt(`지불할 금액을 입력하십시오`))
            var balance = myMoney - payment
            
            if(balance > 0){
                console.log(`${payment}원를 지불하였습니다.`)
                resolve(balance)
            }
            else{
                reject(`잔액은 ${balance}원입니다. 구매할 수 없습니다.`)

            }

        },1000)


    })


}


buyAsync(500)
.then(function(balance){
    console.log(`잔액은 ${balance}원입니다.`)
    return buyAsync(balance)
})
.then(function(balance) {
    console.log(`잔액은 ${balance}원입니다.`)
    return buyAsync(balance)
})
.then(function(balance){
    console.log(`잔액은 ${balance}원입니다.`)
    return buyAsync(balance)
})
.catch(function(error) {
    console.log(error)
})

위 코드의 실행결과를 보면
100원을 지불했습니다.
잔액은 400원입니다.
100원을 지불했습니다.
잔액은 300원입니다.
100원을 지불했습니다.
잔액은 200원입니다.

비동기 처리 여러 개를 병렬로 실행하기

Promise.all 메서드를 이용하면 비동기 처리 여러 개를 병렬로 실행할 수 있습니다.


function buyAsync(name,myMoney){
    return new Promise(function(resolve,reject) {
        
        setTimeout(function() {
            var payment = parseInt(prompt(`${name}님, 지불할 금액을 입력하십시오`))
            var balance = myMoney - payment
            
            if(balance > 0){
                console.log(`${name}:${payment}원를 지불하였습니다.`)
                resolve(balance)
            }
            else{
                reject(`${name}:잔액은 ${balance}원입니다. 구매할 수 없습니다.`)

            }

        },1000)


    })


}



Promise.all([
    buyAsync("Tom",500),
    buyAsync("Huck",600),
    buyAsync("Becky",1000)
])
.then(function(balance){
    console.log(balance)
})
.catch(function(error) {
    console.log(error)
})
profile
Security Engineer를 준비중인 Junior 개발자입니다(Devops/ Cyber Security/Backend에 관심이 많습니다).

0개의 댓글