개발공부/Javascript

13. 비동기의 꽃 JavaScript async 와 await 그리고 유용한 Promise APIs

MyAlice 2021. 4. 27. 14:33
728x90

** 이 글은 유튜브 강의을 보고 공부하면서 스스로 콘솔로 작성하고, 따라치면서 Javascript 기초 공부를 하는 공간입니다.

www.youtube.com/watch?v=aoQSOZfz3vQ&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=13

//async & await
//clear style of using promise :)

//1. async

function fetUser() {
    return new Promise((resolve, reject) => {
        resolve('ellie');
    });

}

const user = fetUser();
user.then((result) => console.log(result)); //ellie


// async 로 변환하면 ?
async function fetUser() {
    return 'ellie';

}

const user = fetUser();
user.then((result) => console.log(result)); //ellie

// 2. await

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

async function getApples() {
    await delay(1000);
    return 'apple';
}

async function getBanana() {
    await delay(1000);
    return 'banana';
}

function pickFruits() { //콜백 지옥!!!!!!!!!!!!!!!
    return getApples()
    .then(apple => {
        return getBanana()
        .then(banana => {
           console.log(apple, banana);
        });
    });
}

async function pickFruits() {
    const apple = await getApples(); //1초 뒤 
    const banana = await getBanana(); //1초 뒤 

    return apple+banana;

}

//2초나 걸림 ,,, 이걸 해결하기 위해서 
async function pickFruits() { //병렬적으로 수행! (근데 코드가 더러움 ㅠ)

    const applePromise = getApples();
    const bananaPromise = getBanana();

    const apple = await applePromise; //1초 뒤 
    const banana = await bananaPromise; //1초 뒤 

    return '${apple} + ${banana}';

}

//3. useful Promise APIs

function pickAllFruits() {
    return Promise.all([getApple(), getBanana()]).then(fruits => {
        fruits.join('+');
    });
}

pickAllFruits().then(console.log); // 'apple' + 'banana'

function pickOnlyOne(){
    return Promise.race([getApples(), getBanana()]);
}

pickOnlyOne().then(console.log);
728x90