- ๐ Callback์ด๋?
- ๐ Promise๋?
- ๐ ์ฐธ์กฐ
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์๊ฐ ๋ฐ๋ ์ธ์์ ๊ฐ์ string, number ๋ฟ๋ง ์๋๋ผ ํจ์ ์์ฒด๋ก๋ ๋ฐ์ ์ ์๋ค.
์ฌ๊ธฐ์ ์ธ์๋ก ๋ฐ๋ ํจ์๋ฅผ ๋ค์ ํธ์ถํ๋ ๊ธฐ๋ฅ์ callback์ด๋ผ ํ๋ค.
์๋ ์์ ๋ฅผ ๋ณด๊ฒ๋๋ฉด, add ํจ์๋ฅผ ํธ์ถํ๊ฒ๋๋ฉด ์ธ์๋ก 10๊ณผ callback ํจ์๋ฅผ ๋ณด๋ด๊ฒ ๋๋ค.
callback ํจ์๋ ๋ฐํ๊ฐ์ผ๋ก 5๋ฅผ ๋ํ๋ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์๋ค.
๋ฐ๋ผ์ add ํจ์๋ callback ํจ์์ ๋ฐํ๊ฐ์ ๋ฐํํ๊ฒ ๋๋ค.
function add(a, callback) { return callback(a) } add(10, function (res) { return res +5 });
callback hell์ callback์ ์ฐ์์ผ๋ก ์ฌ์ฉํ์ ๋, ์ ์ง๋ณด์๊ฐ ํ๋ค์ด์ง๋ ๋ฌธ์ ๋ฅผ ์๋ฏธํ๋ค.
์๋์ ์์๋ฅผ ๋ณด๊ฒ ๋๋ฉด, add ํจ์๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถํ์ฌ 10์ 5+5+5+5๋ฅผ ํ๋ ์ฝ๋์ด๋ค.
์ด๋ ๋ฏ ๋จ์ํ ์ฝ๋๋ callback์ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด callback hell์ด ๋ฐ์ํ๊ฒ ๋๋ค.
add(10, res => { add(res, res => { add(res, res => { add(res, res => { console.log(res) }) }) }) })
Primise๋ ๊ธฐ๋ณธ์ ์ผ๋ก callback๊ณผ ๊ฐ์ ์ผ์ ํ๋ค.
ํ์ง๋ง primise๋ ์์ ์ด ๋๋ ํ, ์คํํ ํจ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์๋๋ผ primise์ ๋ฉ์๋์ธ .then()์ ํธ์ถํ๊ฒ ๋๋ค.
let promise = new Promise(function(resolve, reject) { // executor (์ ์ ์ฝ๋, '๊ฐ์') });
new Promise์ ์ ๋ฌ๋๋ ํจ์๋ executor(์คํ์, ์คํ ํจ์) ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
executor๋ new Promise๊ฐ ๋ง๋ค์ด์ง ๋ ์๋์ผ๋ก ์คํ๋๋๋ฐ, ๊ฒฐ๊ณผ๋ฅผ ์ต์ข ์ ์ผ๋ก ๋ง๋ค์ด๋ด๋ ์ ์ ์ฝ๋๋ฅผ ํฌํจํ๋ค.
executor์ ์ธ์ resolve์ reject๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์์ฒด ์ ๊ณตํ๋ ์ฝ๋ฐฑ์ด๋ค.
๊ฐ๋ฐ์๋ resolve์ reject๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์๊ณ executor ์ ์ฝ๋๋ง ์์ฑํ๋ฉด ๋๋ค.
๋์ ์ ๋ ์ค ํ๋๋ ๋ฐ๋์ ํธ์ถํด์ผํ๋ค.
- resolver(value) : ์ผ์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋ ๊ฒฝ์ฐ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ value์ ํจ๊ป ํธ์ถํ๋ค.
- reject(error) : ์๋ฌ ๋ฐ์ ์ ์๋ฌ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ error์ ํจ๊ป ํธ์ถํ๋ค.
์ฆ, executor๋ ์๋์ผ๋ก ์คํ๋๋๋ฐ ์ฌ๊ธฐ์ ์ํ๋ ์ผ์ด ์ฒ๋ฆฌ๋๋ค.
์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด executor๋ ์ฒ๋ฆฌ ์ฑ๊ณต ์ฌ๋ถ์ ๋ฐ๋ผ resolve๋ reject๋ฅผ ํธ์ถํ๋ค.
์ถ๊ฐ์ ์ผ๋ก, new Promise ์์ฑ์๊ฐ ๋ฐํํ๋ promise ๊ฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ ๋ด๋ถ ํ๋กํผํฐ๋ฅผ ๊ฐ๋๋ค.
- state โ ์ฒ์์ "pending"(๋ณด๋ฅ)์ด์๋ค resolve๊ฐ ํธ์ถ๋๋ฉด "fulfilled", reject๊ฐ ํธ์ถ๋๋ฉด "rejected"๋ก ๋ณํ๋ค.
- result โ ์ฒ์์ undefined์ด์๋ค resolve(value)๊ฐ ํธ์ถ๋๋ฉด value๋ก, reject(error)๊ฐ ํธ์ถ๋๋ฉด error๋ก ๋ณํ๋ค.