PROMISE
์์ ๊ธ์ ์ฝ๋ฐฑ ์ง์ฅ ์ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ค ํ๋๋ก Promise ํจํด์ด ์ ์๋์๋ค.
jQuery์์๋ ์์ ํ์ง ์์ง๋ง Promiseํจํด์ด Deferred ๋ก ์ฌ์ฉ๋๊ณ ์๋ค.
Promise ํจํด์ ์ฌ์ฉํ๋ฉด 1. ๋น๋๊ธฐ ์์ ๋ค์ ์์ฐจ์ ์ผ๋ก ์งํํ๊ณ ๋, ๋ณ๋ ฌ๋ก ์งํํ๋ ๋ฑ์ ์ ์ด๊ฐ ์์ํด์ง๊ณ 2. ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค. ๋ํ ๋ด๋ถ์ ์ผ๋ก ์์ธ์ฒ๋ฆฌ์ ๋ํ ๊ตฌ์กฐ๊ฐ ํํํด, ์ค๋ฅ ๋ฐ์ ์ 3. ์ค๋ฅ ์ฒ๋ฆฌ์ ๋ํด ๋ณด๋ค ์ง๊ด์ ์ผ๋ก ๊ด๋ฆฌํด์ค ์ ์๋ ์ฅ์ ์ด ์๋ค.
Promise๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ฑ๊ณต(fulfilled)ํ๋์ง, ์คํจ(rejected)ํ๋์ง ๋ฑ์ ์ํ ์ ๋ณด์ ์ฒ๋ฆฌ ์ข ๋ฃํ ์คํ๋ ์ฝ๋ฐฑํจ์(then, catch)๋ฅผ ๋ด๊ณ ์๋ ๊ฐ์ฒด์ด๋ค.
Promise๋ ์ฃผ๋ก ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํ์ํ ๋ ์ฌ์ฉํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ ๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ฐ์์ค๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
์์ ์ฝ๋๋ Promise ์ ์ธ๊ณผ ์คํ ๋ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์๋ค.
Promise์ states
Promise๋ ์ฌ์ ์ ์๋ฏธ๋ก "์ฝ์"์ด๋ค. js์์๋ "์ง๊ธ์ ์๋๋ฐ ์ด์์์ผ๋ฉด ์ด๋ฐ๊ฐ ์ฃผ๊ณ ์์ผ๋ฉด ์๋ ค์ค๊ฒ"๋ผ๋ ์ฝ์์ผ๋ก ๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ promise๋ ๋ค์๊ณผ ๊ฐ์ ์ํ(state)๋ฅผ ๊ฐ์ง๋ค.
pending(๋๊ธฐ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง์ด ์์ง ์๋ฃ๋์ง ์์ ์ํ. (์ฝ์์ ์ํ ์ค์ธ ์ํ)
fulfilled(์ดํ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด promise๊ฐ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์ค ์ํ. (์ฝ์์ด ์ง์ผ์ง ์ํ)
rejected(์คํจ) : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์คํจํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ(์ฝ์์ด ๋ชป ์ง์ผ์ง ์ํ)
settled : ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์คํจ์ด๋ ์ฑ๊ณต์ด๋ ๊ฒฐ๋ก ์ด ๋ ์ํ์ด๋ค.
๊ฐ ์ํ๋ฅผ ์ฐจ๋ก๋๋ก ์ดํด๋ณด์.
Pending
๋ค์๊ณผ ๊ฐ์ด new Promise()
๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด pending ์ํ๊ฐ ๋๋ค.
๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฝ๋ฐฑ ํจ์์ ์ธ์๋ก resolve, reject ์ ์ ๊ทผ ํ ์ ์๋ค.
promsie๊ฐ ์์ฑ๋ ์งํ๋ถํฐ resolve๋ reject๊ฐ ํธ์ถ๋๊ธฐ ์ ๊น์ง์ ์ํ์ด๋ค.
Fulfilled
์ฝ๋ฐฑ ํจ์์ ์ธ์์ธ resolve๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ฉด fulfilled(์ดํ) ์ํ๊ฐ ๋๋ค. fulfilled์ํ๊ฐ ๋๋ฉด ์๋์ ๊ฐ์ด then()
์ ์ด์ฉํด ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐ์ ์ ์๋ค.
Rejected
์ฝ๋ฐฑ ํจ์ ์ธ์์ธ reject๋ก reject()
๋ฉ์๋๋ฅผ ์คํํ๋ฉด rejected(์คํจ) ์ํ๊ฐ๋๋ค. rejected ์ํ๊ฐ ๋๋ฉด ์คํจํ ์ด์ (์คํจ ์ฒ๋ฆฌ์ ๊ฒฐ๊ณผ ๊ฐ)๋ฅผ ์๋์ ๊ฐ์ด catch()
๋ก ๋ฐ์ ์ ์๋ค.
์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ catch()
๋ง๊ณ then()
๋ง์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ ์๋ ์๋ค.
๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ง๋ง ๊ฐ๊ธ์ ์ด๋ฉด catch ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์๋ํ๋ฉด then()์ ๋๋ฒ์งธ ์ธ์๋ก๋ ๋ค์ ์์์ ๊ฐ์ด ์ค๋ฅ๋ฅผ ๊ฐ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ ๋ง์ ์์ธ ์ฒ๋ฆฌ ์ํฉ์ ์ํด์๋ catch()๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์์
์์ ์ฝ๋๋ ์๋ฒ์์ ์๋ต์ ์ ๋๋ก ๋ฐ์์ค๋ฉด resolve() ๋ฉ์๋ ํธ์ถ, ์๋ต์ด ์์ผ๋ฉด reject() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์์ ์ด๋ค. ํธ์ถ๋ ๋ฉ์๋์ ๋ฐ๋ผ then()์ด๋ catch()๋ก ๋ถ๊ธฐํ์ฌ ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํ๋ค.
Promise Chaining
์ฌ๋ฌ๊ฐ์ Promise ์ฌ๋ฌ๊ฐ๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ด then()
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ฌ๋ฌ๊ฐ๋ฅผ ์ฐ๊ฒฐ ํ ์ ์๋ค.
์์
์ค๋ฌด์์ ์์ ๋ฒํ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ฐ์์ ํ์ฑ, ์ธ์ฆ ๋ฑ์ ์์ ์ ๊ฑฐ์น๋ ์ฝ๋๋ฅผ ์ดํด๋ณผ ๊ฒ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ๊ฐ์ ํ๋ก๋ฏธ์ค๋ฅผ .then()
์ผ๋ก ์ฐ๊ฒฐํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค.
Promise.all
์ฌ๋ฌ๊ฐ์ ๋น๋๊ธฐ ์์ ๋ค์ด ์กด์ฌํ๊ณ ๊ทธ ์์ ๋ค์ด ๋ชจ๋ ์๋ฃ๋์์ ๋ ๋ค์ ์์ ์ ์งํํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ํ์ฉํ๋ฉด๋๋ค.
์ฐธ์กฐํ์ด์ง
Last updated