API ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ต์ ๋ฐ์ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋๋ฐ, ์ฌ๊ธฐ์ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ๋๊ธฐ, ๊ธฐ๋ค๋ฆฌ์ง ์๋ ๊ฒ์ด ๋น๋๊ธฐ ๋ฐฉ์์ด๋ผ๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด ๊ฒ์๊ธ์ ๋ฑ๋กํ๋ค๊ณ ํ์ ๋, ๋๊ธฐ ๋ฐฉ์
์ ๊ฒ์๊ธ์ ๋ฑ๋กํ๊ณ , ๋ฑ๋ก ์๋ฃ ํ ๊ฒ์๊ธ์ ๋ถ๋ฌ์ค๋ ํ์์ด๋ค. ๋ฐ๋ฉด, ๋น๋๊ธฐ ๋ฐฉ์
์ ๊ฒ์๊ธ์ด ๋ฑ๋ก ์๋ฃ๋๊ธฐ ์ ์ ๊ฒ์๊ธ์ ๋ถ๋ฌ์จ๋ค. ๋น๋๊ธฐ ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ง ์์ฒญ๋ค์ด ์ผ์ด๋ ๋ ์๋ก ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์ ๋์์ ์ฌ๋ฌ๊ฐ์ง์ ์ผ์ ํ ๋ ์ฌ์ฉํ๋ค.
ํ์ง๋ง ๋น๋๊ธฐ ๋ฐฉ์
์ ๊ฒ์๊ธ ๋ฑ๋ก ํ ๊ฒ์๊ธ์ ๋ถ๋ฌ์์ ๋ ๊ฒ์๊ธ์ด ๋ถ๋ฌ์์ง์ง ์๋ ๋ฑ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๊ฒฝ์ฐ์ ๋๊ธฐ ๋ฐฉ์
์ ์ฌ์ฉํ๊ฒ ๋๋ค.
JS๋ฅผ ํฌํจํด์ ๋๋ถ๋ถ์ ์ธ์ด๋ ๋๊ธฐ
์คํ ๋ฐฉ์์ด๊ณ , ์ธ๋ถ์์ ์ ๊ณตํด์ฃผ๋ ๊ธฐ๋ฅ๋ค์ ํจ์จ์ ์ผ๋ก ์๋ํ๋๋ก ํ๊ธฐ ์ํด ๋น๋๊ธฐ
๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋จผ์ , ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์์ฒญํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์.
function ํจ์์ด๋ฆ() {
const data = axios.get('https://koreanjson.com/posts/1')
console.log(data) // Promise
}
์์ฒญ์ ๋ณด๋ด๋๊ณ ๋์ ์๋ต์ด ์ฌ๊ฑฐ๋ผ๊ณ ์ฝ์ํ ์ํ๋ก ๋ค์์ค์ ์ฝ๋๋ก ๋์ด๊ฐ๋ค. ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ฝ์์ฐฝ์๋ return๋ promise
๊ฐ์ฒด๊ฐ ๋ณด์ฌ์ง๊ฒ ๋๋ค. ์ฌ๊ธฐ์ promise
๊ฐ์ฒด๋?
Promise ๊ฐ์ฒด๋ JS์์ ๋น๋๊ธฐ
์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ก, ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ํ์ํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค!
Promise์๋ 3๊ฐ์ง ์ํ๊ฐ ์๋ค.
Pending(๋๊ธฐ): ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง์ด ์์ง ์๋ฃ๋์ง ์์ ์ํ
Fulfilled(์ดํ): ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ด ํ๋ก๋ฏธ์ค๊ฐ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด ์ค ์ํ
Rejected(์คํจ): ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์คํจํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ํ
๋น๋๊ธฐ ๋ฐฉ์์ ๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ช
๋ น์ด๋ async
์ await
์ด๋ค.
async function ํจ์์ด๋ฆ() {
const data = await axios.get('https://koreanjson.com/posts/1')
console.log(data) // {id: 1, title: "์ ๋น์ ๋ชฉ์ ์ด๋ ํ๋์ด ...", ...}
}
์์ ๊ฐ์ด ์์ฑํ๋ฉด await๋ฅผ ์ฌ์ฉํด์ ์๋ต์ด ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ต์ด ์จ ํ์ ์๋ซ์ค ์ฝ๋๋ก ๋ด๋ ค๊ฐ๊ฒ ๋๋ค.