Promise
์ง๊ธ์ผ๋ก๋ถํฐ ์๊ฐ์ด ๋๋ ์ฌ์ด์ ์ผ์ด๋ ์ด๋ค ์ผ์ด๋ผ ํ ์ ์๋ค. ๋ฏธ๋์ ์ด๋ค์ผ์ด ์๊ธธ ์ ์์ง๋ง ์ง๊ธ ๋ฐ๋ก ์ผ์ด๋์ง ์๋๋ค.
Promise๊ฐ ์์๋ '๋ ๋๋ ๋ง์ผ..' ์์
ES5 with jQuery
์ด์ ์๋ es5์ jquery๋ฅผ ์ด์ฉํด get์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ success์ error๋ฅผ ๋ฐ์ get์ด๋ผ๋ method๋ setTimeout๊ณผ ์ ์ฌํ๋ค๊ณ ๋ณผ ์ ์๋ค.
continuation passing style (ํจ์๋ฅผ ์ง์์ ์ผ๋ก ๋๊ฒจ์ค๋ค.) - async.js ๋ฉ์๋ ์์๋
Promise - ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ก๋ค. (๋ฅ๋์ )
๊ฐ์ฅ ํฌ๊ฒ ๋ฌ๋ผ์ง ๋ถ๋ถ
new๋ผ๊ณ ๊ธ์์ ํจ๊ป Promise๊ฐ ์ฐ์๋ค. new๊ฐ ํ๋ ์ผ์ด ๋ฌด์์ธ๊ฐ. ์ธ์คํด์ค, ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ค๋ค.
์ด์ (Promise๊ฐ ์์์ ๋์)๊น์ง๋ ์๋์ ์ธ ํ๋์๋ค. ๊ธฐ์กด์๋ ์์ ์ฅ ์ ์๋ ๋ฌผ๊ฑด์ด ์์๊ธฐ ๋๋ฌธ์, ํธ์ถ์ด ์๋ฃ ๋ ๋๊น์ง ๋ง๋ฅ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ ํธ์ถ๋๋ฉด '๊ฐ์ฌํฉ๋๋ค' ํ๊ณ ๋ค์๊ฒ์ ํ๊ณ ๋ ํธ์ถํ๋ฉด ๊ฐ์ฌํฉ๋๋ค
ํ๊ณ ๋ค์ ๊ฒ์ ํ์๋ค. ๋ค ๋๋๋ฉด ์ด๊ฑฐ ํด์ฃผ์ธ์~ ํ๊ณ ์๋์ ์ธ ํ๋์๋ค.
ํ์ง๋ง ์ง๊ธ์
new Promise => ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ค๋ค. ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋์์ค๋ค.
๊ฐ์ฒด๋ผ๋๊ฒ ๋ง๋ค์ด ์ก๋ค. ์์ ์ฅ ์ ์๋ ๋ฌผ๊ฑด์ด ๋ง๋ค์ด ์ก๋ค. ๋ถํ์ ํ๊ณ ์ค๋ฌผ๋ก ๊ฐ๊ฒ ๋์๋ค. ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ฒด์งํฅ๊ณผ ์ ๋ชฉํ์ฌ ๋น๋๊ธฐ๋ฅผ ๋ค๋ฅผ ์ ์๊ฒ ํ์๋ค.
์๋๋ ํจ์๋ก ๋ง๋ค๊ณ ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ง ํ๋๋ฐ ์์ ๋๊ฐ ๋์ด๋๊ณ ๋ฅ๋์ ์ผ๋ก ํ ์ ์๊ฒ ๋์๋ค.
ํ์ฉ์ฑ์ด ํจ์ฌ ์ปค์ก๋ค.
peomise๋ฅผ ์จ๋ callbackhell์ด ๋ํ๋ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ promise๊ฐ callbackhell๋ฅผ ํด๊ฒฐํด ์ค๋ค. ํ๋๊ฑด ์๋ชป๋๊ฑฐ๋ค.
๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง์ new Promise๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ก ๋ฐ๋๋ค๋ ์๋ฏธ - ํ์ฉ์ฑ(์์ ๋, ๋ฅ๋์ฑ)์ด ๋ค์ํด ์ก๋ค.
๋ณ์์ ๋ด์ ์๋ ์๋ค.
๋ณ์๋ฅผ ๋๊ฒจ์ค ์ ์๋ค.
return ํ ์ ์๋ค.
์ฐจ๊ทผ์ฐจ๊ทผ ์ดํด๋ณด์
new Promise๋ ์ธ์๋ก ํจ์๋ฅผ ํ๋ ๋ฐ๋๋ค.
๊ทธ ํจ์์๋
resolve
์reject
๋ผ๋ ์ธ์๋ฅผ ๋ฐ๋๋ค.์ด ๋๊ฐ๋ Promise์ธก์์ ์๋์ผ๋ก ๋๊ฒจ์ฃผ๋ ๊ฒ์ด๋ค.
new Promise์ ์ธ์๋ก ๋ฐ์ ํจ์ ๋ด๋ถ์์ ๋น๋๊ธฐ ์์ ์ ํ๋ค.
์ฝ๋๋ฅผ ๋ณด๋ฉด resolve์ reject๋ฅผ ์คํํ๋ค. ์ด๋
ํจ์
๋ผ๋ ๊ฒ์ด๋ค.์ฑ๊ณตํ๋ฉด์ resolve๋ฅผ ์คํํ๊ณ ์คํจํ๋ฉด reject๋ฅผ ์คํํ๋ค.
var youtubePromise
์ด ๋ณ์์๋ ๋น๋๊ธฐ ์์ ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ฐ์ฒด์ด๋ค. (Promise์ instance์ด๋ค)
Promise Instance์๋ then๊ณผ catch๋ฉ์๋๊ฐ ์๋ค.
new Promise์ ์ธ์คํด์ค์ด๋ค.
์ธ์คํด์ค์๋ then์ด๋ผ๋ ๋ฉ์๋์ catch๋ผ๋ ๋ฉ์๋๊ฐ ์๋ค.
then๊ณผ catch๋ ์ธ์๋ก function์ ๋ฐ๋๋ค.
then์ ์ธ์๋ก ๋ฐ์ ์ฝ๋ฐฑํจ์๋ resolve๋์ ๋ ์คํ๋๋ค.
catch๋ผ๋ ๋ฉ์๋๋ reject๋์ ๋ ์คํ๋๋ค.
then์ ์ธ์์ ์ฝ๋ฐฑํจ์์์ data๋ผ๋ ์ธ์๋ฅผ ๋ฐ๋๋ฐ ๊ทธ ์ธ์๋ success์์์ resolve๋ก ๋๊ฒจ์ค ๊ฒ์ด๋ค.
rejectํ์ ๋ ๋ฐ๋ error์ธ์๋ catch์ ์ฝ๋ฐฑํจ์ ์ธ์๋ก ์ ๋ฌ ๋๋ค.
then๊ณผ catch์ ์ธ์๋ก ๋ฐ์ callbackํจ์๋ ๋น๋๊ธฐ๋ก ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด๋ค.
all
promise๋ all์ด๋ผ๋ ๋ฉ์๋๊ฐ ์๋ค. ์ธ์๋ก๋ ๋ฐฐ์ด์ ๋ฐ๋๋ค. ๋ฐฐ์ด์์๋ promise์ instance๋ค์ด ๋ค์ด์๋ค. ๋ฐฐ์ด์ ์๋ promise๋ค์ด resolve๋๊ณ ๋๋ฉด์ then์ด ํธ์ถ๋๋ค. ์ด ์๋ฏธ๋ ๋ฐฐ์ด์ ์์๋ค์ด ์ ๋ถ resolve๊ฐ ๋๋ค๋ ๋ณด์ฅ์ ๋ฐ๊ณ ์ธ ์ ์๋ ๊ฒ์ด๋ค.
Last updated
Was this helpful?