jineecode

async / await 본문

JS

async / await

지니코딩 2021. 4. 27. 12:56

 async, await은 비동기를 다루지만, 프로미스와는 다른 사용법을 가지고 있고 프로미스를 이용한다.

function myFunc() {
    
}

async function myAsync() {
    
}

console.log(myFunc);
console.log(myAsync);

모양이 특이한 것을 볼 수 있다.

 

호출을 해보자.

 

function myFunc() {
    return 'func';
}

async function myAsync() {
    return 'async';
}

console.log(myFunc());
console.log(myAsync());

promise가 나온다.

 

function delayP(sec) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(new Date().toISOString());
        }, sec * 1000);
    });
}


function myFunc() {
    return 'func';
}

async function myAsync() {
    return 'async';
}

console.log(myFunc());
console.log(myAsync());
console.log(delayP(3));

그렇다는 것은 then 을 쓸 수 있다는 뜻이 된다.

 

async function myAsync() {
    return 'async';
}

myAsync().then((result) => {
   // then의 리턴값이 곧 다음 프로미스의 결과값으로 넘어가듯이,
    // async 함수 내에서 리턴하는 값은 promise의 return으로 들어온다.
    console.log(result);
});


Await?

 

await은 뭔가를 기다리는 것.

promise가 resolve 되어서 결과값이 넘어올 때까지 기다리는 것.

 

function delayP(sec) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(new Date().toISOString());
        }, sec * 1000);
    });
}


function myFunc() {
    return 'func';
}

async function myAsync() {
    delayP(3).then((time) => {
        console.log(time);
    })
    return 'async';
}

 

async는 비동기이므로,

async가 찍힌 뒤, 3초 뒤에 날짜가 찍힌다.

 

 

3초를 기다리게 한 뒤에 return을 하고 싶을 때 어떻게 해야할까?

 

async 함수이기 때문에 await를 쓸 수 있다.

await를 써주면, promise가 resolve 될 때까지 await 다음 줄로 넘어가지 못한다.

 

async function myAsync() {
    await delayP(3);
    return 'async';
}

myAsync().then((result) => {
    console.log(result);
});

 

// (3초 뒤에) async

 

await를 변수에 담으면, 일반함수의 리턴 값을 받듯이 쓸 수 있다.

 

async function myAsync() {
    const time = await delayP(3);
    console.log(time);
    return 'async';
}

myAsync().then((result) => {
    console.log(result);
});

 

 

 

'JS' 카테고리의 다른 글

&& 연산자로 if 역할 대신하기  (0) 2021.05.12
Javascript 정렬 함수  (0) 2021.04.29
promise  (0) 2021.04.27
싱글스레드 자바스크립트.  (0) 2021.04.26
스코프 & 클로저  (0) 2021.04.26
Comments