...

async ํจ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ
์ต์ ํ ๋์ง ์๋ ์ฝ๋
getApple()๊ณผ getBanana() ๋ผ๋ ๋น๋๊ธฐ ํจ์๊ฐ ์๊ณ , ๊ฐ ํจ์๋ค์ 1์ด๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์คํ๋๋ค.
๋ค์ ์ฝ๋๋ await์ ๋๋ฒ์ ์จ์ 2์ด๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค. ๋ง์ผ, getApple()๊ณผ getBanana() ๋น๋๊ธฐ ํจ์๊ฐ ์๋ก ์ฐ๊ด์ด ์๋ค๊ณ ๊ฐ์ ์ ํ ๋, ์๊ฐ ๋ญ๋น์ธ ์ ์ด๋ค.
function delay(){
return new Promise( (resolve, reject) => {
setTimeout(() => resolve(), 1000);
})
}
async function getApple(){
await delay();
return "apple";
}
async function getBanana(){
await delay();
return "banana";
}
async function getFruites(){
console.time();
let a = await getApple(); // 1์ด ์์
let b = await getBanana(); // 1์ด ์์
console.log(`${a} and ${b}`);
console.timeEnd();
}
getFruites()

์ต์ ํ ์ฝ๋
ํต์ฌ์ ํ๋ก๋ฏธ์ค(async)ํจ์๋ฅผ await๊ณผ ๊ฐ์ด์จ์ ์คํ์ํค๋๊ฒ ์๋๋ผ, ๋ฏธ๋ฆฌ ํจ์๋ฅผ ๋๊ธฐ/๋ ผ๋ธ๋กํน์ผ๋ก ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ ํ๋ก๋ฏธ์ค๊ฐ์ await๋ฅผ ํตํด ๋ฐ๋ ์์ด๋ค.
function delay(){
return new Promise( (resolve, reject) => {
setTimeout(() => resolve(), 1000);
})
}
async function getApple(){
await delay();
return "apple";
}
async function getBanana(){
await delay();
return "banana";
}
async function getFruites(){
console.time();
let getApplePromise = getApple(); // asyncํจ์๋ฅผ ๋ฏธ๋ฆฌ ๋
ผ๋ธ๋กํน์ผ๋ก ์คํํ๋ค.
let getBananaPromise = getBanana(); // asyncํจ์๋ฅผ ๋ฏธ๋ฆฌ ๋
ผ๋ธ๋กํน์ผ๋ก ์คํํ๋ค.
// ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๊ฐ ๋ฐฑ๋จ์์ ๋
๋ฆฝ์ ์ผ๋ก ๊ฑฐ์ ๋์์ ์คํ๋๊ฒ ๋๋ค.
console.log(getApplePromise)
console.log(getBananaPromise)
let a = await getApplePromise; // ์์์ ๋ฐ์ ํ๋ก๋ฏธ์ค๊ฐ์ฒด ๊ฒฐ๊ณผ data๋ฅผ await์ ํตํด ๊บผ๋ด๋ ๊ฒ์ด๋ค. ๊ทธ์ด์ ๊ทธ์ดํ๋ ์๋.
let b = await getBananaPromise;
console.log(`${a} and ${b}`);
console.timeEnd(); // ๋ณธ๋๋ผ๋ฉด 1์ด+1์ด ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๋๋ฐ, ์์์ 1์ด๊ธฐ๋ค๋ฆฌ๋ ํจ์๋ฅผ ๋ฐ๋ก ์ฐ์์ผ๋ก ๋น๋๊ธฐ๋ก ๋ถ๋ ค์๊ธฐ ๋๋ฌธ์, ๋์ถฉ 1.01์ด๋ง ๊ธฐ๋ค๋ฆฌ๋ฉด ์ฒ๋ฆฌ๋๋ค.
})
getFruites()


Promise.all ๋ฉ์๋
Promise.all() ์ ๋ฐฐ์ด ์ธ์์ ๊ฐ ํ๋ก๋ฏธ์ค ๋น๋๊ธฐ ํจ์๋ค์ด resolve๊ฐ ๋ชจ๋ ๋์ผ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด ๋ฐ๋๋ค. ๋ฐฐ์ด์ธ์์ ๊ฐ ํ๋ก๋ฏธ์ค ํจ์๋ค์ ์ ๊ฐ๊ฐ ๋น๋๊ธฐ ๋
ผ๋ธ๋กํน์ผ๋ก ์คํ๋์ด ์๊ฐ์ ๋จ์ถ ํ ์ ์๋ค. ๋ฆฌํด๊ฐ์ ๊ฐ ํ๋ก๋ฏธ์ค ํจ์์ ๋ฐํ๊ฐ๋ค์ด ๋ฐฐ์ด๋ก ๋ด๊ฒจ์ ธ ์๋ค.
function delay(){
return new Promise( (resolve, reject) => {
setTimeout(() => resolve(), 1000);
})
}
async function getApple(){
await delay();
return "apple";
}
async function getBanana(){
await delay();
return "banana";
}
async function getFruites(){
console.time();
let [ a, b ] = await Promise.all([getApple(), getBanana()]); // ๊ตฌ์กฐ ๋ถํด๋ก ๊ฐ ํ๋ก๋ฏธ์ค ๋ฆฌํด๊ฐ๋ค์ ๋ณ์์ ๋ด๋๋ค.
console.log(`${a} and ${b}`);
console.timeEnd();
}
getFruites()

์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.