# Javascript Async return Promise For await

# Javascript Async return Promise For await

by jihoon kim

HTML

<h1>Javascript Async return Promise For await</h1>
<pre id="contents">
# async function ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/async_function

■ async function 선언은 AsyncFunction객체를 반환하는 하나의 비동기 함수를 정의한다.
    또한 async function expression을 사용해서 async function을 선언할 수도 있다.

    async function name([param[, param[, ... param]]]) {
        statements
    }
    - asnyc/await 는 비동기 코드를 작성하는 새로운 방법이다.
      이전에는 비동기코드를 작성하기 위해 callback이나 promises를 사용해야 했다.

    - async 함수에는 await식이 포함될 수 있습니다.
      이 식은 async 함수의 실행을 일시 중지하고 전달 된 
      Promise의 해결을 기다린 다음 async 함수의 실행을 다시 시작하고 완료후 값을 반환합니다.

    - async 함수내에 await가 유효합니다.
    - async 함수의 본문 외부에서 사용하면 SyntaxError가 발생합니다.

■ Syntax
    async function name([param[, param[, ... param]]]) {
        statements
    }
    : 매개변수
        :: name    :   함수의 이름.
        :: param   :   함수에게 전달되기 위한 인자의 이름.
        :: statements  :   함수본문을 구성하는 내용.

    : 반환 값 
        :: Promise
            async 함수에 의해 반환 된 값으로 해결되거나 async함수 내에서 발생하는 캐치되지 않는 예외로 거부되는 값.

■ 목적
    async/await함수의 목적은 
    사용하는 여러 promise의 동작을 동기스럽게 사용할 수 있게 하고, 
    어떠한 동작을 여러 promise의 그룹에서 간단하게 동작하게 하는 것이다.
    promise가 구조화된 callback과 유사한 것 처럼 
    async/await또한 제네레이터(generator)와 프로미스(promise)를 묶는것과 유사하다.

ex) 
    function resolveAfter2Seconds(x) {
      return new Promise(resolve => {
        setTimeout(() => {
          resolve(x);
        }, 2000);
      });
    }

    async function add1(x) {
      const a = await resolveAfter2Seconds(20);
      const b = await resolveAfter2Seconds(30);
      return x + a + b;
    }

    add1(10).then(v => {
      console.log(v);  // prints 60 after 4 seconds.
    });

    async function add2(x) {
      const p_a = resolveAfter2Seconds(20);
      const p_b = resolveAfter2Seconds(30);
      return x + await p_a + await p_b;
    }

    add2(10).then(v => {
      console.log(v);  // prints 60 after 2 seconds.
    });

■ await와 promise.all을 혼동하지...