ES8์์ ๊ฐ๋จํ๊ณ ๊ฐ๋ ์ฑ ์ข๊ฒ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋๊ธฐ์ฒ๋ผ ๋์ํ๋๋ก ๊ตฌํํ ์ ์๋ async/await๊ฐ ๋ฑ์ฅํ๋ค.
async/await๋ ํ๋ก๋ฏธ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, async/await๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๋ฏธ์ค์ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋ ์์ด ๋ง์น ๋๊ธฐ ์ฒ๋ฆฌ์ฒ๋ผ ํ๋ก๋ฏธ์ค๊ฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํ ์ ์๋ค.
async ํจ์๋ async ํค์๋๋ฅผ ํตํด ์ ์ํ๊ณ , ํ๋ก๋ฏธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
async function asyncCall() {
console.log('calling');
const result = await resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
asyncCall();
await ํค์๋๋ ํ๋ก๋ฏธ์ค๊ฐ settled ์ํ(๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ํ๋ ์ํ)๊ฐ ๋ ๋๊น์ง ๋๊ธฐํ๋ค๊ฐ settled ์ํ๊ฐ ๋๋ฉด ํ๋ก๋ฏธ์ค์ resolve r๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. await ํค์๋๋ async ํจ์์์๋ง ์ ํจํ๊ณ , async ํจ์ ์ธ๋ถ์์ ์ฌ์ฉํ๋ฉด SyntaxError๊ฐ ๋ฐ์ํ๋ค.
await๋ฌธ์ด ์๋ค๋ฉด asynct ํจ์๋ ๋น๋๊ธฐ์ ์ผ๋ก ์๋ฃ๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ํ๋ก๋ฏธ์ค์ await ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฃผ์ํ์ฌ์ผ ํ๋ค.
async function getFruit(){
const apple = await new Promise(resolve => setTimeout(() => resolve('apple'), 2000));
const banana = await new Promise(resolve => setTimeout(() => resolve('banana'), 3000));
const melon = await new Promise(resolve => setTimeout(() => resolve('melon'), 1000));
console.log([apple, banana, melon]); // ['apple','banana','melon']
}
getFruit(); // ์ฝ 6์ด๊ฐ ์์๋๋ค.
์์ ์์ ์ ๊ฐ์ด getFruit ํจ์๋ ์ข ๋ฃ๋ ๋๊น์ง ์ฝ 6์ด๊ฐ ์์๋๋ค. ๊ทธ๋์ ์์ ๊ฐ์ด getFruit ํจ์ ๋ด๋ถ์ 3๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ์๋ก ์ฐ๊ด์ฑ์ด ์๊ธฐ ๋๋ฌธ์ apple -> banana -> melon ์์ ์์๋ก ์ฒ๋ฆฌํ ํ์๊ฐ ์๋ค.
async function getFruit() {
const fruits = await Promise.all([
new Promise(resolve => setTimeout(() => resolve('apple'), 2000)),
new Promise(resolve => setTimeout(() => resolve('banana'), 3000)),
new Promise(resolve => setTimeout(() => resolve('melon'), 1000)),
]);
console.log(fruits); // ['apple', 'banana', 'melon']
}
getFruit(); // ์ฝ 3์ด ์์
์์ฒ๋ผ Promise.all ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋ฏธ์ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ค.
async/await ์ ์๋ฌ ์ฒ๋ฆฌ๋ try... catch๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค. async ํจ์ ๋ด์์ catch ๋ฌธ์ ์ฌ์ฉํ์ฌ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ์ง ์๋๋ค๋ฉด async ํจ์๋ ๋ฐ์ํ ์๋ฌ๋ฅผ reject ํ๋ ํ๋ก๋ฏธ์ค๋ฅผ ๋ฐํํ๋ค.
๐ธ ์ถ์ฒ ๐ธ
์ ๋๋ ์ดํฐ์ async/await - ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ ๋ค์ด๋ธ
์๋ฐ์คํฌ๋ฆฝํธ 13. ๋น๋๊ธฐ์ ๊ฝ async์ await - ๋๋ฆผ์ฝ๋ฉ
'JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ TypeScript ] ํ์ ์ ์ํ interface ์ ํํธ ์ฃผ์ ๋ฌ๊ธฐ. (0) | 2023.06.30 |
---|---|
[TS] ํ๋ก์ ํธ์ tsconfig ์ค์ ํ๊ธฐ. (0) | 2023.05.28 |
[ JavaScript / Promise ] ์๋ฐ์คํฌ๋ฆฝํธ์ Promise์ ๋ํ์ฌ (0) | 2022.10.20 |
[ JavaScript ] undefined์ null์ ์ฐจ์ด์ ๋ํด ์์๋ณด๊ธฐ. (0) | 2022.07.17 |
[ JavaScript ] var, let, const ํํค์น๊ธฐ. (0) | 2022.07.04 |