JavaScript async ์™€ await

async.awaitโ€‹โ€‹

promise๋ฅผ ์ข€ ๋” ๊ฐ„ํŽธํ•˜๊ณ  ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š”๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š”๊ฒƒ

async

// async & await 
// clear style of using promise :)
// promise๋ฅผ ์ข€ ๋” ๊น”๋”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์คŒ 

// 1.async 
async function fetchUser() {
   //do network reqeust in 10 secs....
    return 'ellie';
}
// async ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด promise๋ž‘ ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•จ

const user = fetchUser();
user.then(console.log);
console.log(user);

await

// 2. await
function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function getOrange () {
    await delay(2000);
    return '๐ŸŠ';
}
// await async๊ฐ€ ๋ถ™์–ด ์žˆ๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
// ์ฒด์ด๋‹์„ ์•ˆํ•˜๊ณ  ๋™๊ธฐ์ ์€์ฝ”๋“œ๋ฅผ ์ ๋Š”๊ฒƒ ์ฒ˜๋Ÿผ ๋‹จ์ˆœํ™”๊ฐ€ ๋จ 

async function getBanana() {
    await delay(1000);
    return '๐ŸŒ';
}
// promise๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋„ˆ๋ฌด ๋งŽ์ด ์ค‘์ฒฉ๋˜์„œ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ์ฝœ๋ฐฑ์ง€์˜ฅ์„ ๋งŒ๋“ค์–ด๋ƒ„ 
// function pickFruits() {
//    return getOrange()
//        .then(orange => {
//            return getBanana().then(banana => `${orange} + ${banana}`);
//        });
// }

async function pickFruits() {
        const orangePromise = getOrange(); //ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ˆœ๊ฐ„ ์ฝ”๋“œ๋ธ”๋Ÿญ ์‹คํ–‰
        const bananaPromise = getBanana(); //ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ˆœ๊ฐ„ ์ฝ”๋“œ๋ธ”๋Ÿญ ์‹คํ–‰
        const orange = await orangePromise; //๋™๊ธฐ
        const banana = await bananaPromise; //๋™๊ธฐ
        return `${orange} + ${banana}`
}
// ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋น„ํšจ์œจ์ ์ž„ ์˜ค๋ Œ์ง€ 1์ดˆ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๋ฐ”๋‚˜๋‚˜ 1์ดˆ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์ƒ์„ฑํ•˜๊ธฐ ๋–„๋ฌธ์— 2์ดˆ๊ฐ€ ์†Œ์š”๋จ 
// ๊ทธ๋ž˜์„œ ๋”ฐ๋กœ ์˜ค๋žœ์ง€,๋ฐ”๋‚˜๋‚˜ Promise๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์„œ ๋™์‹œ์— ์‹คํ–‰๋˜๊ฒŒ ํ•จ (๋ณ‘๋ ฌ์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰)
// ํ•˜์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง€๋Š” ๋‹จ์ ์ด ์žˆ์Œ 

useful promise APIs

// useful promise APIs 
// ์œ„์˜ async function pickFruits() {} ์ฝ”๋“œ๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ •๋ฆฌํ•ด์คŒ
function pickAllFruits() {
    return Promise.all([getOrange(), getBanana()])
        .then(fruits => fruits.join(' + ')); // Orange , Banana ๋ฐ›์•„์ง€๋ฉด join
}
pickAllFruits().then(console.log) // ์„ฑ๊ณตํ•˜๋ฉด consle.log ์ถœ๋ ฅ
// promise.all ์„ ์‚ฌ์šฉํ•ด ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌ 

function pickOnlyOne() {
    return Promise.race([getOrange(), getBanana]); 
    //์–ด๋–ค๊ณผ์ผ์ด๋˜ ์ฒซ๋ฒˆ์งธ ๊ณผ์ผ์„ ๋ฐ›๊ณ  ์‹ถ๋‹ค. -> ๊ฐ€์žฅ๋จผ์ € ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’๋งŒ ์ „๋‹ฌ๋จ (.race)
}

pickOnlyOne().then(console.log); // ๐ŸŒ

Last updated