Async & await
Callback ์ง์ฅ์ ์ ๋ฐํ๋ ์ฒ๋ฆฌ๋ฐฉ์๋ณด๋ค ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๋๊ธฐ๋ฐฉ์์ฒ๋ผ ์ง๊ด์ ์ผ๋ก ํํํ ์ ์๋ค.
Async & await๋?
-
Async
๋ฅผ ํจ์(Function) ์์ ๋ถ์ด๋ฉด ํญ์ promise๋ฅผ ๋ฐํํ๋ค.(ํ๋ผ๋ฏธ์ค๊ฐ ์๋ ๊ฐ์ ๋ฐํํ๋๋ผ๋ ์ดํ ์ํ์ ํ๋ผ๋ฏธ์ค(resolved promise)๋ก ๊ฐ์ ๊ฐ์ธ ์ดํ๋ ํ๋ผ๋ฏธ์ค๊ฐ ๋ฐํ๋๋๋ก ํจ)
-
Async
๋ ํ๋ฒํ ํจ์๋ฅผ ํ๋ผ๋ฏธ์ค๋ฅผ ๋ฆฌํดํ๋ ๋น๋๊ธฐ์ ์ธ ํจ์๋ก ๋ง๋ค์ด์ฃผ๋ ํค์๋๊ณ -
Async ํจ์
์์์await
๋ ์ฝ๋์ ์์๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ์์ ์ ์ฐจ๋ก๊ฐ ์ฌ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์์ ์ ์ฐจ๋ก๊ฐ ์ค๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
async function test() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve('์๋ฃ!'), 3000);
});
let result = await promise; // ํ๋ผ๋ฏธ์ค๊ฐ ์ดํ๋ ๋๊น์ง ์น๋ก๋ฅผ ๊ธฐ๋ค๋ฆผ (*)
alert(result); // "์๋ฃ!"
}
test();
Async & await ์ด์ ์ Promise๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
- promise๋ ์ ๊ทผํ ๋ .then()์ ์ฌ์ฉํ๊ณ error์ฒ๋ฆฌ๋ .catch()๋ก ํ๋ค.
- ๋จ์ด์ ์๋ฏธ ์ฝ์ โ๋ฏธ๋โ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ํ ๊ฒ์ด๊ธด ํ์ง๋ง โpromiseโ๋ฅผ ๊ฐ๊ณ ์๊ธฐ๋ง ํ๋ฉด, ๊ทธ ๋ฐ์ดํฐ๊ฐ ๋ฏธ๋์์ ์ ์๋์ง?, ์ด๋ฏธ ๋ฐ์๋์ง? ์ ๋ํด์๋ ์๊ด์๋ค.
- ํ๋ก๋ฏธ์ค๋ ์ผ๊ด๋ ๋น๋๊ธฐ๋ฅผ ๊ฐ์ ํ๋ค.
Promise์ Async & await ์ฐจ์ด
- ํ๋ก๋ฏธ์ค .then()๊ณผ await๋ ์ฐ๋ ๋ฐฉ๋ฒ์ด ๊ฑฐ์ ๋๊ฐ๋ค.
๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด ์ฝ๋ฐฑํจ์๋ฅผ ์๊ตฌํ์ง ์๋๋ค๋ ์ ์ ๋ค๋ฅด๋ค.
์์๋ณผ๊ฒ
- ์ด์ ์ ๋์จ๊ฒ์ด์ง๋ง ์ต๊ทผ์ async๋ฅผ ์ฌ์ฉํ์ง ์์๋ await๋ง์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅํ๋ค๋ ๊ธ์ ๋ณด์๋๋ฐ, ์ฐพ์๋ด์๊ฒ ๋ค.
์ฐธ๊ณ ๋งํฌ
Async-await๋ ์ด๋ป๊ฒ ๊ตฌํํ๋๊ฐ
[๋ฒ์ญ] async/await ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ promise๋ฅผ ์ดํดํ๊ธฐ