# Async & Await
์ด์ฑํฌ ์ด์จ์ดํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์ฒ๋ฆฌ ํจํด์ ์ต์ ๋ฌธ๋ฒ์ ๋๋ค. Promise์ Callback์์ ์ฃผ๋ ๋จ์ ๋ค์ ํด๊ฒฐํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ์ ์ฌ๊ณ ๋ฐฉ์์์ ๋ฒ์ด๋ ๋๊ธฐ์ (์ ์ฐจ์ )์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋์์ค๋๋ค.
# ๊ธฐ๋ณธ ๋ฌธ๋ฒ
async ํจ์์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
async function fetchData() {
await getUserList();
}
async ํจ์๋ ํจ์์ ์์ async
๋ฅผ ๋ถ์ฌ์ฃผ๊ณ ํจ์์ ๋ด๋ถ ๋ก์ง ์ค ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ก์ง ์์ await
๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค. ์ข ๋ ์ ํํ๊ฒ ๋งํ๋ฉด Promise ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ API ํธ์ถ ํจ์ ์์ await
๋ฅผ ๋ถ์
๋๋ค.
# ๊ธฐ๋ณธ ์์
๋ค์ ์ฝ๋๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
async function fetchData() {
var list = await getUserList();
console.log(list);
}
function getUserList() {
return new Promise(function(resolve, reject) {
var userList = ['user1', 'user2', 'user3'];
resolve(userList);
});
}
fetchData()
ํจ์์์ getUserList()
ํจ์๋ฅผ ํธ์ถํ๊ณ ๋๋ฉด Promise ๊ฐ์ฒด๊ฐ ๋ฐํ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ Promise๋ ์คํ์ด ์๋ฃ๋ ์ํ(resolve)์ด๋ฉฐ ์คํ์ ๊ฒฐ๊ณผ๋ก userList
๋ฐฐ์ด์ ๋ฐํํ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ fetchData()
๋ฅผ ํธ์ถํ๋ฉด userList
์ ๋ฐฐ์ด์ด ์ถ๋ ฅ๋ฉ๋๋ค.
fetchData(); // ['user1', 'user2', 'user3']
# (๋ถ๋ก) Async & Await ๋ฌธ๋ฒ์ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐ๋ฒจ ํ๋ฌ๊ทธ์ธ ์ค์
๋ทฐ ์ต์ CLI ๋๊ตฌ๋ ๋ณ๋์ ๋ฐ๋ฒจ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ์ง ์์๋ ๋ฐ๋ก async & await ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง, ๋ทฐ CLI 2.x ๋ฒ์ ๋๋ ์๋์ ๊ฐ์ ์ถ๊ฐ ์ค์ ์ด ํ์ํฉ๋๋ค.
- ๋ค์ ๋ฐ๋ฒจ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ค.
npm i babel-plugin-transform-runtime
- .babelrc ํ์ผ์ ์๋์ ๊ฐ์ ์ค์ ์ ์ถ๊ฐํ๋ค.
"plugins": ["transform-runtime"]