์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ํน์ ์ฝ๋์ ์ฐ์ฐ์ด ๋๋ ๋๊น์ง ์ฝ๋์ ์คํ์ ๋ฉ์ถ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ๋จผ์ ์คํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ฑ์ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด, ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ์์ฒญ์ ๋ํ ์๋ต์ ์ค๋๊น์ง ๋ง๋ฅ ๊ธฐ๋ค๋ฆด ์ ์์ด ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค. ์ฆ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ์ด๋ฒคํธ๋ค์ web api๋ฅผ ์ด์ฉํด ์ฝ๋ฐฑํ๋ก ๋ณด๋ด๊ณ , ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํด ์ฝ์คํ์ด ๋น์์ ๊ฒฝ์ฐ ์ฝ๋ฐฑ ํจ์๋ค์ ์คํํ๋ค.
์์ธํ ๋ด์ฉ์ ์ด๋ฒคํธ ๋ฃจํ์์ ๋ค๋ฃฐ ๊ฒ์ด๋ค.
- ์ฝ๋๊ฐ ์คํ๋๋ฉด call stack์ ์์ด๊ณ ๋ง์ง๋ง์ผ๋ก ๋ค์ด์จ ์ฝ๋๋ถํฐ ์คํ๋๋ค.
- ๋น๋๊ธฐ ํจ์๊ฐ ์คํ๋๋ฉด web api๊ฐ ํธ์ถ๋๋ค.
- web api๋ ๋น๋๊ธฐ ํจ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ callback queue์ ๋ฃ๋๋ค.
promise๋ microtask queue๋ก,timeout์ task queue๋ก,requestAnimationFrame์ animation frame์ผ๋ก ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฃ๋๋ค.- ์ฝ๋ฐฑ ์ด๋ ์ฐ์ ์์๋ microtask > animation > task queue ์ด๋ค.
- event loop๋ call stack์ด ๋น ์ํ๊ฐ ๋๋ฉด ์ฝ๋ฐฑ์ call stack์ผ๋ก ์ด๋์ํจ๋ค.
- response๊ฐ ok์ผ ๋๋ง ์ ์ ๋ฐ์ดํฐ๊ฐ ๋ฆฌํด๋๋ค.
- ์๋ฌ ๋ฐ์ ์ ๋จ์ํ Error ๊ฐ์ฒด๋ฅผ ๋์ง๊ธฐ๋ณด๋จ ๊ณตํต๋ ์๋ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ก ๋ด๋ ค์ฃผ๋ฉด ๋ฐ๋ ์ชฝ์์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ๋์ฑ ์ฌ์์ง๋ค.
{
isError: true,
errorData: {
message: errorData.message,
statusCode: response.status,
},
}์ด๋ฐ ๋ฐฉ์์ผ๋ก ์๋ฌ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํด์ฃผ๋ฉด ์ํ ์ฝ๋์ ๊ด๊ณ ์์ด ํน์ HTTPError ๊ฐ์ ํน์ ์๋ฌ ๊ฐ์ฒด์ ๊ด๊ณ ์์ด ์ด๋ฏธ ์ ์ํด๋์ ์ธํฐํ์ด์ค์ ๋ง๋ ๊ฐ์ฒด๊ฐ ๋ฆฌํด๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๋ค.
ES8(2017)์์ ๋์จ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ด๋ค. promise์ ๋จ์ ์ ๋ณด์ํ๊ณ ๊ฐ๋ ์ฑ์๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋์์ค๋ค.
function ํค์๋ ์์ async๋ฅผ ๋ถ์ฌ์ฃผ๊ณ function ๋ด๋ถ์ promise๋ฅผ ๋ฐํํ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ ํจ์ ์์ await์ ๋ถ์ฌ์ค๋ค.
- promise๋ then๊ณผ catch๋ฅผ ์ฌ์ฉํด ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ฐ๋ฉด, async/await์ try-catch ๋ฌธ์ ํ์ฉํด ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
- async/await์ ์ฌ์ฉํ๋ฉด promise๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ์๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.