avatar
Published on

Javascript - Promise

Author
  • avatar
    Name
    yceffort

Promise

new Promise(executor)

executorλŠ” resolve및 reject 인수λ₯Ό 전달할 μ‹€ν–‰ν•¨μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€. μ‹€ν–‰ν•¨μˆ˜λŠ” resolve와 rejectλ₯Ό λ°›μ•„ μ¦‰μ‹œ μ‹€ν–‰λœλ‹€. μ‹€ν–‰ν•¨μˆ˜λŠ” 보톡 비동기 μž‘μ—…μ„ μ‹œμž‘ν•œ ν›„, λͺ¨λ“  μž‘μ—…μ„ 끝내면 resolveλ₯Ό ν˜ΈμΆœν•΄μ„œ Promiseλ₯Ό μ΄ν–‰ν•˜κ³ , 였λ₯˜κ°€ λ°œμƒν•œ 경우 rejectλ₯Ό ν˜ΈμΆœν•΄ κ±°λΆ€λœλ‹€.

PromiseλŠ” λ‹€μŒ 쀑 ν•˜λ‚˜μ˜ μƒνƒœλ₯Ό κ°€μ§„λ‹€.

  • λŒ€κΈ°(pending): μ΄ν–‰λ˜κ±°λ‚˜ κ±°λΆ€λ˜μ§€ μ•ŠλŠ” 초기 μƒνƒœ
  • 이행(fullfiled): 연산이 μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ¨
  • κ±°λΆ€(rejected): 연산이 μ‹€νŒ¨

https://mdn.mozillademos.org/files/8633/promises.png

Promise.all(iterable)

iterable내에 λͺ¨λ“  ν”„λ‘œλ―ΈμŠ€λ₯Ό μ΄ν–‰ν•˜λŠ”λ°, λŒ€μ‹  μ–΄λ–€ ν”„λ‘œλ―ΈμŠ€κ°€ κ±°λΆ€λ₯Ό ν•˜κ²Œ 되면 μ¦‰μ‹œ κ±°λΆ€ν•˜λŠ” ν”„λ‘œλ―ΈμŠ€λ₯Ό λ°˜ν™˜ν•œλ‹€. λͺ¨λ“  ν”„λ‘œλ―ΈμŠ€κ°€ μ΄ν–‰λ˜λŠ” 경우, ν”„λ‘œλ―ΈμŠ€κ°€ κ²°μ •ν•œ 값을 μˆœμ„œλŒ€λ‘œ λ°°μ—΄λ‘œ λ°˜ν™˜ν•œλ‹€.

Promise.race(iterable)

iterable내에 κ°€μž₯ λΉ λ₯΄κ²Œ 이행/κ±°λΆ€ ν•œ 값을 λ°˜ν™˜ν•œλ‹€.

Promise.reject()

μ£Όμ–΄μ§„ 이유둜 κ±°λΆ€ν•˜λŠ” Promise 객체λ₯Ό λ°˜ν™˜ν•œλ‹€

Promise.resolve()

μ£Όμ–΄μ§„ κ°’μœΌλ‘œ μ΄ν–‰ν•˜λŠ” Promiseλ₯Ό λ°˜ν™˜ν•œλ‹€. then이 μžˆλŠ” 경우, λ°˜ν™˜λœ ν”„λ‘œλ―ΈμŠ€λŠ” then을 따라가고 λ§ˆμ§€λ§‰ μƒνƒœλ₯Ό μ·¨ν•œλ‹€.

function myAsyncFunction(url) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest()
    xhr.open('GET', url)
    xhr.onload = () => resolve(xhr.responseText)
    xhr.onerror = () => reject(xhr.statusText)
    xhr.send()
  })
}