- ๋ฐ๋ก์งํ
- 10์ด ๋ค ์งํ
- 5์ด ๋ค ์งํ
- 5์ด ๋ค ์งํ (promise.all)
// ๋ฐ๋ก
function delay(ms){
return new Promise(resolve=>{
setTimeout(()=>{},ms)
resolve();
});
}
async function getApple(){
await delay(5000);
return 'apple';
}
async function getBanana(){
await delay(5000);
return 'banana';
}
async function pickFruits(){
const a = await getApple();
const b = await getBanana();
return `${a} + ${b}`;
}
pickFruits().then(console.log)
apple + banana
๊ฐ ๋ฐ๋ก ์ถ๋ ฅ๋๋ค.
pickFruits ์คํ ํ๋ฉด์ ๊ฐ์ฅ ๋จผ์ getApple์๋ณด๊ณ
ํด๋น ๋ด์ฉ์์ delayํจ์๋ฅผ ๋ณด๋๋ฐ ํด๋น delayํจ์๊ฐ
๋ฐ๋ก ๋ฆฌํดํ๋ resolve๋ or setTimeout๊ฐ์ ํจ์๋ด์์ ์ด๋ฐ๊ฐ ์งํํ๋ resolve๋๋ฅผ ์ฒดํฌํ๋๋ฐ ๋ฐ๋ก ๋ฆฌํดํ๋ฏ๋ก ๊ทธ ๋ค์ ๋ฌธ์ฅ์ธ apple๋ก ๋ฆฌํด์ ๋ฐ๋กํ๊ณ getBananaํจ์๋ฅผ ์คํ ํ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋ก ๋ฆฌํดํ์ฌ
a+b
์ธapple+banana
๋ฅผ ๋ฐ๋ก ์ถ๋ ฅํ๋ค.
//10์ด
function delay(ms){
return new Promise(resolve =>setTimeout(resolve,ms));
}
async function getApple(){
await delay(5000); //delay์ resolve๊ฐ setTimeout์ ์ํด ๊ธฐ๋ค๋ฆฌ๋ => ๊ธฐ๋ค๋ฆฐ๋ค. return ๋ฆ๊ฒ
return 'apple';
}
async function getBanana(){
await delay(5000); //delay์ resolve๊ฐ setTimeout์ ์ํด ๊ธฐ๋ค๋ฆฌ๋ => ๊ธฐ๋ค๋ฆฐ๋ค. return ๋ฆ๊ฒ
return 'banana';
}
async function pickFruits(){
const a = await getApple(); //await์ ์ํด getApple์ return ์ ๊น ๊ธฐ๋ค๋ ค => ๋๊ธฐ
const b = await getBanana(); //5์ด๋ค ์งํ๋๋ฉด getBanana์ return ์ ๊น ๊ธฐ๋ค๋ ค => ๋๊ธฐ
return `${a} + ${b}`;
}
pickFruits().then(console.log)
apple + banana
๊ฐ 10์ด ๋ค์ ์ถ๋ ฅ๋๋ค.
pickFruits ์คํ ํ๋ฉด์ ๊ฐ์ฅ ๋จผ์ getApple์๋ณด๊ณ
ํด๋น ๋ด์ฉ์์ delayํจ์๋ฅผ ๋ณด๋๋ฐ ํด๋น delayํจ์๊ฐ
๋ฐ๋ก ๋ฆฌํดํ๋ resolve๋ or setTimeout๊ฐ์ ํจ์๋ด์์ ์ด๋ฐ๊ฐ ์งํํ๋ resolve๋๋ฅผ ์ฒดํฌํ๋๋ฐ setTimeout ์์ resolve๊ฐ ์์ผ๋ฏ๋ก ์ ๋ถ ๋๊ธฐํ๋ ์ํ๋ฅผ ์ ์งํ๊ณ 5์ด ๋ค apple์ ๋ฆฌํดํ๊ณ a์ ๋ฃ๊ณ ๋ง์ฐฌ๊ฐ์ง๋ก
getBanana๋ฅผ ์คํํ๋ฉด์ setTimeout ์์ resolve๊ฐ ์์ผ๋ฏ๋ก ์ ๋ถ ๋๊ธฐํ๋ ์ํ๋ฅผ ์ ์งํ๊ณ 5์ด ๋ค banana๋ฅผ ๋ฃ์ดa+b
๋ฅผ ์ถ๋ ฅํ๋ฏ๋ก
์ถ๋ ฅ๊น์ง ์ด, 10์ด๊ฐ ๊ฑธ๋ฆฐ๋ค.
// 5์ด
function delay(ms){
return new Promise(resolve =>setTimeout(resolve,ms));
}
async function getApple(){
await delay(5000);
return 'apple';
}
async function getBanana(){
await delay(5000);
return 'banana';
}
async function pickFruits(){
//promise๋ฅผ ๋ง๋๋ ์๊ฐ ๋ฐ๋ก ์คํ์ด๋๋ค. (์๋ก์๊ฒ ์ฐ๊ด์ ์ฃผ์ง์๊ณ )
const applePromise = getApple();
const bananaPromise = getBanana();
const a = await applePromise;
const b = await bananaPromise;
return `${a} + ${b}`;
}
pickFruits().then(console.log)
apple + banana
๊ฐ 5์ด ๋ค์ ์ถ๋ ฅ๋๋ค.
ํด๋น ํจ์๊ฐ await๋ก ๋ฌถ์ฌ์์ง์๊ณ ์ ์๋์ด ๊ฐ๊ฐ promise๋ฅผ ๋ง๋๋ ์๊ฐ ๋ฐ๋ก ์คํ์ด ๋์ด ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌ๋ ๊ฐ์ด a,b๋ก ๋๊ฒจ์ ธ ์ถ๋ ฅ๋๋ฏ๋ก
๊ฐ๊ฐ์ 5์ด์ฉ์ ์งํํ์ฌ 5์ด ๋ค์ ์ถ๋ ฅ๋๋ค.
//5์ด Promise.all
function delay(ms){
return new Promise(resolve =>setTimeout(resolve,ms));
}
async function getApple(){
await delay(5000);
return 'apple';
}
async function getBanana(){
await delay(5000);
return 'banana';
}
function pickAllFruits(){
return Promise.all([getApple(),getBanana()])
.then(fruits=>fruits.join(' + '))
}
pickAllFruits().then(console.log);
apple + banana
๊ฐ 5์ด ๋ค์ ์ถ๋ ฅ๋๋ค.
Promise.all
์ ์ด์ฉํด ๊ฐ๊ฐ์ ๋ณ๋ ฌ์ ์ผ๋ก ์คํ์์ผ ์ฒ๋ฆฌํ ๊ฐ์ ๋ฆฌํดํ์ฌ ๊ฐ๊ฐ์ 5์ด์ฉ์ด๋ฏ๋ก 5์ด ๋ค์ ์ถ๋ ฅ๋๋ค.
async await๋ ์ผ๋จ ์ฒซ๋ฒ์งธ await์ ๋ด์ฉ์ ํ์ธํ์ฌ ํด๋น
resolve๊ฐ ๋ฐ๋ก ๋ฆฌํด์ด๋ / setTimeout ๊ฐ์ ๊ฒ์ ์ํฅ์ ๋ฐ๋์ ๋ฐ๋ผ
๋ค๋ฅธ ์๋์ await๊ฐ ๋ฐ๋ก ๋ฆฌํด์ด๋ฉด ๊ธฐ๋ค๋ฆฌ์ง์๊ณ ์งํ๋๊ณ (๋ณ๋ ฌ) setTimeout์ ์ํฅ์ ๋ฐ์ผ๋ฉด ํด๋น ์๊ฐ๋งํผ ๊ธฐ๋ค๋ฆฌ๊ณ ๋ค์ await์ ์คํํ๋ค.(์ง๋ ฌ)