ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [javascript] async/await
    NULL STACK 2019. 10. 10. 09:20
    반응형

    async

    async 함수는 항상 promise를 반환

    async function f() {
        return 'async example';
    }
    
    // 이상없는데 언제 알려줄까? 의 상태
    console.log(f()); // Promise {<resolved>:'async example'}
    
    f().then(alert);
    
    // f()와 동일하게 동작
    async function f2() {
        return Promise.resolve('async example2');
    }

    await

    promise가 확정된 결과를 반환할 때 까지 대기.

    지금은 뭐 없는데ㅋㅋㅋ의 상태

    async function f() {
        const promise = new Promise((resolve, reject) => {
            setTimeout(() => resolve('done!'), 1000); // 1초 뒤 결과가 확정된다.
        });
        alert(await promise);
    }
    
    f(); // 1초 뒤 알림창 팝업

    await만 사용시 오류 발생

    function notF(){
      const promise = Promise.resolve(1);
      const result = await promise; // Syntax Error
      return result ;
    }

    async/await 의 여러 표현방법

    1. 기본
    async function f() {
        await foo(1, 1000);
    }
    1. 즉시실행
    (async function f() {
        await foo(1, 1000);
    })();
    1. 화살표 함수
    const f = async () => {
        await foo(1, 1000);
    };

    async/await의 잘못된 예제

    // 원하는 결과 : 1 2 3
    async function f() {
        await foo(1, 2000);
        await foo(2, 500);
        await foo(3, 1000);
    }
    
    function foo(num, sec) {
        setTimeout(function() {
            console.log(num);
        }, sec);
    }
    
    f(); //실제 결과 : 2 3 1

    1 2 3 순서가 되도록 수정

    // foo()를 수정함
    async function f() {
        await foo(1, 2000);
        await foo(2, 500);
        await foo(3, 1000);
    }
    
    function foo(num, sec) {
        return new Promise(function(resolve, reject) {
            setTimeout(function() {
                console.log(num);
                resolve('async는 Promise방식을 사용합니다.');
                // resolve를 써주지 않으면 2 3 1 이 나옴.. why?
            }, sec);
        });
    }
    
    f(); //실제 결과 : 1 2 3
    반응형
Designed by Tistory.