[JS] Promise

κΉ€μž¬μš°Β·2023λ…„ 12μ›” 8일

πŸ’‘ Promise와 Async/Await 배우기 전에 동기와 비동기 방식을 이해해야 ν•©λ‹ˆλ‹€.

πŸ“– 동기

  • 동기(직렬적)λŠ” 순차적으둜 μž‘μ—…(task)을 μˆ˜ν–‰ν•˜κ³  μš”μ²­μ„ 보낸 λ‹€μŒ
    응닡을 λ°›κ³  λ‚˜μ„œ λ‹€μŒ λ™μž‘μ΄ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

  • μˆœμ„œλŒ€λ‘œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  있으면,
    κ·Έ μž‘μ—… μˆœμœ„κ°€ 제일 μš°μ„ μ΄ 되고 ν˜„μž¬ μž‘μ—…μ΄ 처리된 후에 순차적으둜 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

  • 동기 방식은 λΈ”λ‘œν‚Ήμ΄ λ°œμƒν•©λ‹ˆλ‹€.

πŸ“– 비동기

  • λΉ„λ™κΈ°λŠ” ν˜„μž¬ μž‘μ—…ν•˜κ³  μžˆλŠ” λ™μž‘μ˜ 처리 여뢀와 관계없이
    λ‹€μŒ μž‘μ—…μ„ μ‹€ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€.

  • 동기 방식과 달리 μ²˜λ¦¬κ°€ μ™„λ£Œλ˜λŠ” μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • 동기 λ°©μ‹μ—μ„œλŠ” λΈ”λ‘œν‚Ήμ΄ λ°œμƒν•˜μ§€λ§Œ, 비동기 방식은 λΈ”λ‘œν‚Ήμ΄ λ°œμƒν•˜μ§€
    μ•ŠμŠ΅λ‹ˆλ‹€.

πŸ“– promise


  • 비동기 처리λ₯Ό μœ„ν•΄ 콜백 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ”λ° 콜백 ν•¨μˆ˜λ₯Ό 많이 μ“°κ²Œ 되면
    가독성이 λ‚˜λΉ μ§€κ³  μ—λŸ¬ μ²˜λ¦¬κ°€ νž˜λ“€μ–΄μ§€λŠ” 콜백 μ§€μ˜₯에 빠질 수 있기 λ•Œλ¬Έμ—
    콜백 ν•¨μˆ˜μ˜ 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ ES6λΆ€ν„° λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

  • μƒμ„±μž ν•¨μˆ˜λ₯Ό 톡해 μΈμŠ€ν„΄μŠ€ν™”ν•˜κ³  resovle와 reject ν•¨μˆ˜λ₯Ό 인자둜 μ „λ‹¬λ°›λŠ” 콜백 ν•¨μˆ˜λ₯Ό 인자둜 전달받고
    인자둜 전달받은 콜백 ν•¨μˆ˜λ₯Ό λ‚΄λΆ€μ—μ„œ 비동기 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

resovle : 비동기 μ²˜λ¦¬κ°€ μ„±κ³΅ν–ˆμ„λ•Œ λ°›λŠ” 인자
reject : 비동기 μ²˜λ¦¬κ°€ μ‹€νŒ¨ν–ˆμ„λ•Œ λ°›λŠ” 인자

μ•„λž˜ μ˜ˆμ‹œλŠ” promise ν•¨μˆ˜μ— index 값을 λ„£κ³ , 10보닀 크면 resovle 인자λ₯Ό 호좜 크지 μ•ŠμœΌλ©΄ reject 인자λ₯Ό ν˜ΈμΆœν•˜λ„λ‘ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

const proAdd = index => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if(index > 10) {
        reject(`${index}λŠ” 10보닀 클 수 μ—†μŠ΅λ‹ˆλ‹€`)
        return
      }
      console.log(index)
      resolve(index + 1)
    },1000)
  })
}
proAdd(11)
  .then(res => console.log(res))
  .catch(err => console.log(err))
// 좜λ ₯ κ²°κ³Ό : 11λŠ” 10보닀 클 수 μ—†μŠ΅λ‹ˆλ‹€

promiseμ—μ„œ 비동기 μ²˜λ¦¬μ— μ„±κ³΅ν–ˆλŠ”μ§€ μ‹€νŒ¨ν–ˆλŠ”μ§€ μƒνƒœ μ •λ³΄λ‘œ κ°€μ§‘λ‹ˆλ‹€.

pending : 비동기 μ²˜λ¦¬κ°€ 아직 μˆ˜ν–‰λ˜μ§€ μ•Šμ€ μƒνƒœ
fulfilled : 비동기 μ²˜λ¦¬κ°€ μˆ˜ν–‰λœ μƒνƒœ (성곡)
rejected : 비동기 μ²˜λ¦¬κ°€ μˆ˜ν–‰λœ μƒνƒœ (μ‹€νŒ¨)
settled : 비동기 μ²˜λ¦¬κ°€ μˆ˜ν–‰λœ μƒνƒœ (성곡 λ˜λŠ” μ‹€νŒ¨)

πŸ”Ž 후속 처리 λ©”μ„œλ“œ

then

  • then λ©”μ†Œλ“œλŠ” 두 개의 콜백 ν•¨μˆ˜λ₯Ό 인자둜 전달 λ°›μŠ΅λ‹ˆλ‹€.
  • 첫번째 콜백 ν•¨μˆ˜λŠ” 성곡(fulfilled, resolve) μ‹œ 호좜되고 .
    λ‘λ²ˆμ§Έ ν•¨μˆ˜λŠ” μ‹€νŒ¨(rejected, reject) μ‹œ ν˜ΈμΆœλ©λ‹ˆλ‹€.
  • then λ©”μ†Œλ“œλŠ” Promiseλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

catch

  • μ˜ˆμ™Έ(비동기 μ²˜λ¦¬μ—μ„œ λ°œμƒν•œ μ—λŸ¬μ™€ then λ©”μ†Œλ“œμ—μ„œ λ°œμƒν•œ μ—λŸ¬)κ°€ λ°œμƒν•˜λ©΄ ν˜ΈμΆœλ©λ‹ˆλ‹€.
  • catch λ©”μ†Œλ“œλŠ” Promiseλ₯Ό λ°˜ν™˜ν•œλ‹€.

finally

  • ν•¨μˆ˜κ°€ μ„±κ³΅ν•˜κ±°λ‚˜ μ‹€νŒ¨ν•΄λ„κ΄€κ³„μ—†μ΄ μ§€μ •λœ 콜백 ν•¨μˆ˜κ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.
profile
ν”„λ‘ νŠΈμ—”λ“œ 개발자λ₯Ό κΏˆκΎΈλŠ” μ‚¬λžŒ

0개의 λŒ“κΈ€