Promise, async, await, Generator
in Language on Java Script
[ Promise ]
const pr = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('ok') 
        reject(new Error('error'))
    }, 3000)
});
pr.then(
    function(result) {
        console.log(result + '가지러 가자');
    },
    function(err) {
        console.log(err + '다시 주문해주세요');
    }
);
console.log("시작")
pr.then(
    (result) => {
        console.log(result + '가지러 가자');
    }).catch(
        (err) => {
            console.log(err + '다시 주문해주세요');      
    }).finally(
        () => {
            console.log('---주문 끝---')
        }
    )
console.log('test');
[ Promise.all ]
모든 호출이 끝나야 끝난다.
const f1 = () => {
    return new Promise((res, rej) => {
        setTimeout(() => {
            res("1번 주문 완료");
        }, 1000);
    });
};
const f2 = () => {
    return new Promise((res, rej) => {
        setTimeout(() => {
            res("2번 주문 완료");
        }, 3000);
    });
};
const f3 = () => {
    return new Promise((res, rej) => {
        setTimeout(() => {
            res("3번 주문 완료");
        }, 2000);
    });
};
Promise.all([f1(), f2(), f3()]).then((res) => {
    console.log(res);
});
[ Promise.race ]
하나라도 완료되면 끝낸다.
Promise.race([f1(), f2(), f3()]).then((res) => {
    console.log(res);
});
[ async ]
async function getName() {
    // return "Mike";
    // return Promise.resolve("Tom")
    throw new Error("err...")
}
// console.log(getName());
getName().then((name) => {
    console.log(name);
}).catch((err) => {
    console.log(err)
}) 
[ await ]
async 내부에서만 사용가능하다.
function getName(name) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(name);
        }, 1000);
    });
};
async function showName() {
    const result = await getName("Mike");
    console.log(result);
};
console.log("시작");
showName();
const f1 = () => {
    return new Promise((res, rej) => {
        setTimeout(() => {
            res("1번 주문 완료");
        }, 1000);
    });
};
const f2 = (message) => {
    console.log(message);
    return new Promise((res, rej) => {
        setTimeout(() => {
            res("2번 주문 완료");
            // rej( new Error("ERRRRRRRR"));
        }, 3000);
    });
};
const f3 = (message) => {
    console.log(message);
    return new Promise((res, rej) => {
        setTimeout(() => {
            res("3번 주문 완료");
        }, 2000);
    });
};
console.log("시작");
async function order() {
    try {
        const result1 = await f1();
        const result2 = await f2(result1);
        const result3 = await f3(result2);
        console.log(result3);
    } catch (e) {
        console.log(e);
    }
    console.log("종료");
};
console.log("시작");
async function order() {
    try {
        const result = await Promise.all([f1(), f2(), f3()]);
        console.log(result);
    } catch (e) {
        console.log(e);
    }
    console.log("종료");
};
order();
[ Generator ]
함수의 실행을 중간에 멈췄다가 재개할 수 있는 기능
function* fn() {
    console.log(1);
    yield 1;
    console.log(2);
    yield 2;
    console.log(3);
    console.log(4);
    yield 3;
    return "finish";
}
const a = fn();
