Promise 대문자시작으로 선언하면 객체로 선언
// 함수는 호출되는 순서대로 쌓인다 실행되는 시점은 중괄호가 끝나는 시점
/*
const promise = new Promise(() => {
});
*/
/*
new Promise 호출과 동시에 비동기 처리 시작
*/
const promise = new Promise((resolve, reject) => { // new는 런타임중에 실행되므로 컴파일 선언된것이 먼저 실행
/*
시간이 오래 걸리는 실행문 ... 5초
*/
reject(); // 실행이 안됬다
resolve(); // 실행이 됬다
});
// resolve 대응 then , reject 대응 catch
promise.then(() => {
console.log('1. promise() then() called');
}).catch(() => {
console.log('2. promise() catch() called');
});
function testFunc1(){
console.log('testFunc1()');
let startTime = new Date().getTime();
while(new Date().getTime() - startTime < 1000);
testFunc2();
}
function testFunc2(){ // 함수선언은 어디에 있건 상관없다
console.log('testFunc2()');
}
testFunc1();
// // async await
// async function asyncTimeoutCheckAdult(age, timeout) {
// if(age >= 20) {
// setTimeout(() => {
// console.log(`asyncTimeoutCheckAdult(${age})`)
// return age;
// }, timeout);
// }
// else throw new Error(age);
// }
// async function asyncCheckAdult(age) {
// if(age >= 20){ return age; }
// else throw new Error(age);
// }
// async function testAsyncAwaitFunc()
// {
// await asyncTimeoutCheckAdult(100, 5000);
// const promiseCheckAdult = asyncCheckAdult(10);
// // console.log(promiseCheckAdult);
// promiseCheckAdult.then((age) => {
// console.log(`${age} is adult!!`)
// }).catch((age) => {
// console.log(`${age} is not adult!!`)
// });
// const promiseCheckAdult1 = asyncCheckAdult(21);
// promiseCheckAdult1.then((age) => {
// console.log(`${age} is adult!!`)
// }).catch((age) => {
// console.log(`${age} is not adult!!`)
// });
// }
// testAsyncAwaitFunc();
function setTimeoutPromise(timeout) {
return new Promise((resolve, reject)=>{
setTimeout(() => {
resolve();
}, timeout);
})
}
// async await
async function timeoutCheckAdult(age, timeout) {
console.log(`${age}. timeoutCheckAdult`);
await setTimeoutPromise(timeout);
console.log(`${age}. timeoutCheckAdult`);
if (age > 20) return true;
return false;
}
async function asyncCheckAdult(age) {
if (age >= 20) { return age; }
else throw new Error(age);
}
// await 키워드 사용 함수의 종료를 기다리지 않고 다음 함수를 호출한다.
// function asyncCheckAdult(age) {
// return new Promise((resolve, reject) => {
// if (age >= 20) resolve(age);
// else reject(age);
// })
// }
async function testAsyncAwaitFunc()
{
// timeoutCheckAdult(10, 8000);
// timeoutCheckAdult(20, 5000);
// timeoutCheckAdult(30, 1000);
// await timeoutCheckAdult(10, 8000);
// await timeoutCheckAdult(20, 5000);
// await timeoutCheckAdult(30, 1000);
let promises = [];
promises.push(timeoutCheckAdult(10, 8000));
promises.push(timeoutCheckAdult(20, 5000));
promises.push(timeoutCheckAdult(30, 1000));
let results = await Promise.all(promises);
console.log(results);
// const promiseCheckAdult = asyncCheckAdult(10);
// promiseCheckAdult.then((age) => {
// console.log(`${age} is adult!!`);
// }).catch((age) => {
// console.log(`${age} is not adult!!`);
// });
// const promiseCheckAdult1 = asyncCheckAdult(21);
// promiseCheckAdult1.then((age) => {
// console.log(`${age} is adult!!`);
// }).catch((age) => {
// console.log(`${age} is not adult!!`);
// });
}
testAsyncAwaitFunc();
// await : async 함수가 종료 될 때까지 기다린다.
// -> await 키워드 사용 함수의 종료를 기다리지 않고 다음 함수를 호출한다. (settimeout 예제 중 충돌)
// function asyncCheckAdult(age) {
// return new Promise((resolve, reject) => {
// if(age >= 20) resolve(age);
// else reject(age);
// })
// }
// const promiseCheckAdult = asyncCheckAdult(10);
// promiseCheckAdult.then((age) => {
// console.log(`${age} is adult!!`)
// }).catch((age) => {
// console.log(`${age} is not adult!!`)
// });
// const promiseCheckAdult1 = asyncCheckAdult(21);
// promiseCheckAdult1.then((age) => {
// console.log(`${age} is adult!!`)
// }).catch((age) => {
// console.log(`${age} is not adult!!`)
// });