Javascript 동기 비동기

정종찬·2022년 4월 22일

Promise

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 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!!`)
// });

profile
dalssenger

0개의 댓글