๐
async
์await
์ ์ฌ์ฉํ์ฌ ์ง๊ด์ ์ผ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์
async
async
๋async
๋ Promise๋ฅผ ๋ ์ฝ๊ฒ ์ด์ฉํ ์ ์๊ฒ ๋์์ค๋ค.
ํจ์ ์์ async
๋ฅผ ๋ถ์ด๋ฉด ํด๋น ํจ์๋ Promise๋ฅผ ๋ฐํํ๋ ๋น๋๊ธฐ์ฒ๋ฆฌ ํจ์๊ฐ ๋๋ค.
function hello(){
return "hello";
}
async function helloAsync(){
return "hello Async";
}
console.log(hello()); // hello
console.log(helloAsync()); // Promise{<pending>}
helloAsync ํจ์ ์์
async
๊ฐ ๋ถ์ฌ์ ธ ์์ด, Promise๋ฅผ ๋ฐํํ๊ณ ์๋ ๊ฒ์ ์ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด์ helloAsync ํจ์์ then์ ์ฌ์ฉํ ์๋ ์๋ค.
helloAsync().then((res) => {
console.log(res);
}); // hello Async
async๋ฅผ ๋ถ์ฌ์ค helloAsync ํจ์์ return ๊ฐ์ Promise์ resolve ๊ฒฐ๊ณผ๊ฐ์ด ๋๋ค.
await
await
์ด๋await
์ async
ํจ์ ์์์๋ง ๋์ํ๋ฉฐ,
JavaScript๋ await
์ ๋ง๋๋ฉด Promise๊ฐ ์ฒ๋ฆฌ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.
// function delay(ms){
// return new Promise((resolve) => {
// setTimeout(() => {
// resolve();
// }, ms);
// });
//}
function delay(ms){
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
1.
delay()
ํจ์ ์์ฑ
- ์ ๋ฌ๋ฐ์ ms๋งํผ setTimeout์ด ๋๊ธฐํ๋ค๊ฐ, resolveํ๋ฉฐ ๋๋๋ delay ํจ์๋ฅผ ๋ง๋ค์๋ค.
- setTimeout์ด resolveํ๋ ๊ฒ ๋ฐ์ ์์ผ๋ฏ๋ก ์ฝ๋ฐฑํจ์ ์์ฒด๋ฅผ resolve๋ก ์ ๋ฌํ๋ ์๋์ ํํ๋ก ๊ฐ์ถ๋ฆด ์ ์๋ค.
// async function helloAsync(){
// return delay(3000).then(() => {
// return "hello Async";
// });
// }
async function helloAsync(){
await delay(3000);
return "hello async";
}
helloAsync.then((res) => {
console.log(res);
});
// 3์ด๋ค, hello Async ์ถ๋ ฅ๋จ
2.
await
์ฌ์ฉ
await
์ ์ฌ์ฉํ์ฌ return์ 2๋ฒํ๊ณ ์๋helloAsync()
๋ฅผ ๊ฐ๋จํ๊ฒ ๋ฐ๊พธ์ด๋ณผ ์ ์๋ค.await
์ ๋น๋๊ธฐ ํจ์ ํธ์ถ ์์ ๋ถ์ด๋ฉด ๋น๋๊ธฐ ํจ์๊ฐ ๋ง์น ๋๊ธฐ์ ์ธ ํจ์์ฒ๋ผ ์๋ํ๋ค.await
์ด ๋ถ์ ํจ์์ ํธ์ถ์ ๋ค์ ์๋ ํจ์๊ฐ ๋๋๊ธฐ ์ ๊น์ง ์๋์ ์ฝ๋๋ฅผ ์ํํ์ง ์๋๋ค.
ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ๋ฅผ ํ์ตํ๋ฉฐ ๊ฐ์ธ์ ์ผ๋ก ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.