프로미스
프로미스 예제 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 메소드의 콜백 함수가 호출이 됩니다.