λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» DEV/Javascript & NodeJS

[Javascript] Promise (ν”„λ‘œλ―ΈμŠ€)

by vodkassi 2021. 5. 27.
728x90

✨ Promise λž€?

ν–₯ν›„ μ‚¬μš©ν•˜κ²Œ 될 비동기 μ—°μ‚°μ˜ 결과값을 μ²˜λ¦¬ν•˜λ„λ‘ λ„μ™€μ£ΌλŠ” JS 객체이닀.

비동기 λ©”μ„œλ“œμ—μ„œ 동기 λ©”μ„œλ“œμ²˜λŸΌ 값을 λ°˜ν™˜ν•  수 μžˆλ‹€.

 

예제)

 

const testing = new Promise((resolve, reject) 
        => { if (something) resolve(something) else reject(error message) })

testing  
.then(() => return something2)  
.catch(() => return error)  
.finally(() => return final)

 

✨ Promise 의 3가지 μƒνƒœ:

 

Fulfilled: 연산이 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλœ μƒνƒœμ΄λ‹€.

Rejected: 연산이 μ‹€νŒ¨ν•œ μƒνƒœμ΄λ‹€.

Pending: Resolve λ‚˜ Reject κ°€ 호좜되기 μ „κΉŒμ§€μ˜ μˆœκ°„

 

 

✨ .then(), .catch(), .finally()

 

then(callback1, callback2) 의 ν˜•νƒœλ‘œ ν™œμš©λœλ‹€. 

callback1: resolve 된 μΌ€μ΄μŠ€λ₯Ό λ‹€λ£¨λŠ” ν•¨μˆ˜

callback2: reject 된 μΌ€μ΄μŠ€λ₯Ό λ‹€λ£¨λŠ” ν•¨μˆ˜

 

let a = 10
const prom = new Promise((resolve, reject) =>{
    if (a === 9) resolve(a)
    else reject(a)
})

prom
.then(
    ()=>console.log('success'), 
    () => console.log('rejected...')
)

// 'rejected...'

 

callback 1, 2 λŠ” λͺ¨λ‘ 이전 promise μ—μ„œ resolve 둜 λ°˜ν™˜λœ 값을 μ „λ‹¬μΈμžλ‘œ λ°›λŠ”λ‹€.

 

Promise link λŠ” .then() 이 promise 객체λ₯Ό λ°˜ν™˜ν•˜μ§€ μ•Šλ”λΌλ„ 계속 μ΄μ–΄μ§€λ―€λ‘œ, 일일이 reject 에 λŒ€μ‘ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄μ£Όμ§€ μ•Šμ•„λ„ λœλ‹€. μ—λŸ¬λ₯Ό λ°”λ‘œ μ²˜λ¦¬ν•΄μ£Όμ–΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄, λ§ˆμ§€λ§‰μ— catch 둜 ν•œλ²ˆμ— 처리 κ°€λŠ₯ν•˜λ‹€.

 

✨ catch()

 

이전 Promise μ—μ„œ reject 된 값을 μ „λ‹¬μΈμžλ‘œ λ°›μ•„ μ²˜λ¦¬ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

 

//μœ„μ˜ μ˜ˆμ‹œ 차용 
prom.then( () => console.log('success')) 
.catch( (err) => console.log(err) ) // 10

 

✨ finally()

 

Promise κ°€ settled 된 μˆœκ°„ λ°˜ν™˜ν•˜κ²Œ λ˜λŠ” λͺ¨λ“  값을 μ²˜λ¦¬ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

μ „λ‹¬μΈμžλ₯Ό 받지 μ•ŠλŠ”λ‹€.

 

.then(onFinally, onFinally) // 와 λ™μΌν•˜λ‹€ 
prom.then((a)=>{ console.log(a) }) 
.catch((a) => console.log('caught!')) 
.finally(() => console.log('finally..')) 
// 'caught!' 
// 'finally..

 

✨ 마무리

 

Promise λŠ” 비동기 ν”„λ‘œκ·Έλž˜λ°μ˜ κΈ°μ΄ˆμ΄λ‹€. ν”„λ‘œκ·Έλž¨μ„ ꡬ성할 λ•Œ μ‹€ν–‰ μ‹œκ°„μ΄ 쑰금 κ±Έλ¦¬κ±°λ‚˜ lagging ν•  수 μžˆλŠ” μš”μ†Œλ“€μ„ νŒŒμ•…ν•˜μ—¬ 잘 μ μš©ν•  수 μžˆμ„ 것이닀.

 

참고자료

MDN: finally

MDN: promise

λŒ“κΈ€