Javascript - async & await
async & await
- async ์ await๋ Promise๋ฅผ ๊ฐ๊ฒฐ/๊ฐํธํ๊ณ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋๊ฒ ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ค์ด์ฃผ๋ API
- async ์ await๋ ์๋ก์ด ๊ฒ์ด ์ถ๊ฐ ๋๊ฒ ์๋๋ผ, ๊ธฐ์กด์ ์กด์ฌํ๋ Promise ์์ ์กฐ๊ธ ๋ ๊ฐํธํ API๋ฅผ ์ ๊ณตํจ (syntactic sugar)
1. async
- async๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์์ ์ฝ๋ ๋ธ๋ก์ด ์๋์ผ๋ก Promise๋ก ๋ณํ์ด ๋์ด์ง
async function fetchUser() {
return "hello";
}
fetchUser().then(console.log); //ํจ์๋ก ๋ฐ๋ก ํธ์ถ(๋ฐ์์ค๋ ๊ฐ์ด ๊ฐ์ผ๋ฏ๋ก ์๋ต๊ฐ๋ฅ)
const user = fetchUser(); //๋ณ์์ ํ ๋นํ์ฌ ํธ์ถ
user.then(console.log);
console.log(user);
2. await
- await๋ async ํจ์ ๋ด๋ถ์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- error์ฒ๋ฆฌ : try / catch ์ฌ์ฉ
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function getApple() {
await delay(1000);
return "๐";
}
async function getBanana() {
await delay(1000);
return "๐";
}
async function pickFruits() {
const apple = await getApple();
const banana = await getBanana();
return `${apple} + ${banana}`;
}
pickFruits().then(console.log);
async์ await๋ฅผ ์ด์ฉํด์ ๋๊ธฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฏ์ด, ์๋ ์์ฐ์ค๋ฝ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ฒ๋ผ ๋ฆฌํด๊ฐ๋ ์์ฐ์ค๋ฌ์ฐ๋ ๋งค์ฐ ๊ฐํธํ๋ค.
3. await ๋ณ๋ ฌ์ฒ๋ฆฌ - Promise APIs ์ฌ์ฉ
**
- Array ์ ๊ฐ์ด ์ํ ๊ฐ๋ฅํ(iterable) ๊ฐ์ฒด์ ํฌํจ๋ ๋ชจ๋ ๊ฐ์ ๋ด์ ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ๊ณ ์ฌ๋ฌ Promise ์ ๊ฒฐ๊ณผ๋ฅผ ์ง๊ณํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ
function pickFruits() {
return Promise.all([getApple(), getBanana()]).then((fruits) =>
fruits.join(" + ")
);
}
pickFruits().then(console.log);
getApple์ Promise์ getBanana์ Promise์ ๋ฐฐ์ด์ ์ ๋ฌ๋ฐ์ ๋ฐ์์ง ๋ฐฐ์ด์ ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด๋ก ๋ณํํด์ฃผ์๋ค.
**
- ๊ฐ์ฅ ๋จผ์ ์ฒ๋ฆฌ๋๋ Promise์ ๊ฒฐ๊ณผ(ํน์ ์๋ฌ)๋ฅผ ๋ฐํ
unction delay(ms) {
return new Promise((resolve => setTimeout(resolve, ms)));
}
async function getApple() {
await delay(2000);
return '๐';
}
async function getBanana() {
await delay(1000);
return '๐';
}
function pickOnlyOne() {
return Promise.race([getApple(), getBanana()]);
}
pickOnlyOne().then(console.log);
๐๊ฐ 1์ด๋ง์ ์ ๋ฌ๋์๊ธฐ๋๋ฌธ์ ๐๋ง ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ถ์ฒ : ๋๋ฆผ์ฝ๋ฉ by ์๋ฆฌ https://youtu.be/aoQSOZfz3vQ