Home Promise - 2
Post
Cancel

Promise - 2


프로미스



프로미스 예제 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function doJob(name, person){
    return new Promise(resolve, reject) => {
        setTimeout(() =>{
            if(person.hp > 50){
                resolve({
                    result : `${name} success`,
                    loss : 30
                })
            }else{
                reject(new Error(`${name} failed`))
            }
        }, 1000)
    }
}

const kim = {hp : 100}

doJob('work' , kim)
    .then(v =>{
        console.log(v.result)
        kim.hp -= v.loss
        return doJob('study', kim)
    })
    .then(v =>{
        console.log(v.result)
        kim.hp -= v.loss
        return doJob('work', kim)
    })
    .then(v =>{
        console.log(v.result)
        kim.hp -= v.loss
        return doJob('study', kim)
    })
    .catch(e => console.error(e))

1 ~ 4 코드설명

  • 주어진 이름에 일을 수행하는 doJob 함수를 정의합니다.
  • HP를 속성으로 갖는 객체를 매개변수로 전달받아 HP가 50보다 많으면 프로미스가 이행이 됩니다.
  • 이행 결과로는 HP를 차감할 값을 포함하는 객체를 전달하고 HP가 50이하면 프로미스가 거부가 됩니다.

16 코드설명

  • HP의 값 100을 가지는 객체를 정의합니다.

18 ~ 23 코드설명

  • work 이름의 일을 수행하는 프로미스를 생성합니다.
  • 전달된 인자 HP가 100이기 때문에 성공적으로 이행되고 then 메소드 전달한 콜백 함수에 차감될 hp와 결과값이 전달 됩니다.
  • then 메소드에 전달한 콜백 함수에서 study 이름의 일을 수행하는 약속을 반환합니다.
  • 반환된 약속이 이행되면 다음에 연결된 then 메소드의 콜백 함수에서 앞서 반환된 프로미스의 이행 결과가 전달이 됩니다.

24 ~ 27 코드설명

  • 공부하는 약속에 이행된 결과를 콘솔에 출력하고 hp를 착마합니다.
  • 그리고 다시 work 이름의 일을 수행하는 약속을 생성하여 반환합니다.

29 ~ 33 코드설명

  • 이전 then 메소드 콜백 함수에서 반환된 work 이름의 일을 수행하는 프로미스의 이행 결고를 인자로 전달 받습니다.
  • 하지만 이전 까지의 수행된 일들 때문에 hp가 50 이하까지 차감 되었기 때문에 이 콜백 함수는 호출되지 않습니다.

34 코드설명

  • 앞에 이어지는 프로미스들의 연결에서 에러가 발생하게 되면 catch 메소드의 콜백 함수가 호출이 됩니다.
This post is licensed under CC BY 4.0 by the author.