πŸ€™πŸ»Promise Part(2) 예제λ₯Ό 톡해 μ•Œμ•„λ³΄λŠ” Promise Chaining

πŸ€™πŸ»Promise Chaining

μ„œλ²„μ—μ„œ 1초 정도 뒀에 숫자λ₯Ό λ°›μ•„μ˜€λŠ” μƒˆλ‘œμš΄ Promise λ₯Ό λ§Œλ“€μ–΄ 보자.

const fetchNumber = new Promise((resolve, reject) => {
  setTimeout(() => resolve(1), 1000)
})

λ‹€μ‹œ 볡슡 νƒ€μž„.

Promise 의 μΈμžμ— executor λΌλŠ” callback ν•¨μˆ˜λ₯Ό μ „λ‹¬ν•œλ‹€. 그런데 executor λŠ” resolve 와 reject λΌλŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό λ°›λŠ”λ‹€.

μœ„μ˜ μ˜ˆμ‹œ 처럼 Producer λ₯Ό λ§Œλ“€μ—ˆμœΌλ‹ˆ μ†ŒλΉ„ ν•΄λ³΄μž.

πŸ‘».then ν‚€μ›Œλ“œ μΈμžμ— νƒœμ›Œλ²„λ¦¬λŠ” λ‚΄λ§˜λŒ€λ‘œ μ½œλ°±ν•¨μˆ˜

.then 의 μ‚¬μš©μ— 따라 μ΅œμ’… μˆ«μžκ°€ μ–΄λ–»κ²Œ 좜λ ₯λ˜λ‚˜ ν•΄λ³΄μž.

fetchNumber
  .then(num => num * 2)
  .then(num => num * 3)
  .then(num => {
    return new Promise((resolve, reject) => {
      setTimeout(() => resolve(num - 1), 1000)
    })
  })
  .then(num => console.log('μ΅œμ’… 숫자 num 의 값은 : ', num))

fetchnumber

총 도합 1 + 1 = 2초 λ’€ 5λΌλŠ” 값을 좜λ ₯ν•΄ μ£Όμ—ˆλ‹€.

new Promise 둜 λ§Œλ“€μ–΄μ§„ 객체 fetchNumber κ°€ μ„±κ³΅μ μœΌλ‘œ λ™μž‘μ΄ 되면,

.then 을 톡해 resolve 의 1을 num 으둜 λ°›μ•„μ™€μ„œ μƒˆλ‘œμš΄ 값을 λ¦¬ν„΄ν•˜κΈ° μ‹œμž‘ν•œλ‹€.

κ·ΈλŸ¬λ‹€κ°€ κ·Έ 숫자λ₯Ό λ‹€λ₯Έ Server 에 λ³΄λ‚΄μ„œ λ‹€λ₯Έ 숫자둜 λ³€ν™˜λœ 값을 λ°›μ•„μ˜¬ κ±°λ‹€.

μœ„μ²˜λŸΌ λ‹€λ₯Έ μ„œλ²„μ™€ 톡신을 ν•˜λŠ” μƒˆλ‘œμš΄ ν”„λ‘œλ―ΈμŠ€λ₯Ό λ¦¬ν„΄ν–ˆλ‹€.

πŸ§μ—¬κΈ°μ„œ μ•Œ 수 μžˆλŠ” 점

  • .then 은 값을 λ°”λ‘œ 전달할 μˆ˜λ„ 있고
  • .then 은 λ˜λ‹€λ₯Έ 비동기인 Promise λ₯Ό 전달해도 λ˜λŠ”κ΅¬λ‚˜
  • .then μ—¬λŸ¬κ°€μ§€λ₯Ό λ¬Άμ–΄, λ‹€λ₯Έ 비동기적인 μš”μ†Œλ“€μ„ λ¬Άμ–΄μ„œ μ²˜λ¦¬ν•  수 μžˆκ΅¬λ‚˜.


Written by@[DotoriMook]
ν”„λ‘ νŠΈμ—”λ“œ μ£Όλ‹ˆμ–΄ 개발자 λ„ν† λ¦¬λ¬΅μ˜ 기술개발 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€.

GitHubMediumTwitterFacebook