본문 바로가기
Front-end/javascript

[JavaScript] async와 await

by 잔디🌿 2023. 7. 28.

    async

     

    async function 함수명(){
       return 1;
       }
       
       
       ///////////////////////////////////////////////////////////////
       
       async function 함수명(){
        return Promise.resolve(1);
       }

    async는 항상 promise 객체를 반환한다. 

    위 코드에서 빗금을 기준으로 위, 아래 코드는 동일하다.

     

    function hello(){
      return "hello";
      }
      
      
    anync function helloAsync(){
      return "hello abc";
      }
      
    helloAsync.then((res) => {
      console.log(res);
      });

    이 코드를 실행하면 hello abc가 출력된다.

     

    function delay(ms){
      return new Promise((resolve) => {
        setTimeout(resolve,ms); //함수 하나일 때에는 이렇게 함수명만 써도 된다.
      })
    }
    
    async function helloAsync(){
       return delay(3000).then(() =>{
         return "hello Async";
       });
    }
    
    helloAsync().then((res) => {
      console.log(res);
    });

     helloAsync 함수에서 delay의 promise객체를 사용해서 3초를 센 다음, hello Async를 리턴한다. 그려면 여기의 promise는 resolve에 return값을 대입한 것을 수행하니까. 결과적으로 봤을 때, 위 코드는 3초 후 hello async를 출력해주는 함수이다.

     

     await

     

    await를 비동기 함수에 넣으면 이 함수가 마치 동기함수인 것처럼 작동하게된다.(await줄에는 다 동기적으로 수행된다.)

    await은 async 함수내에서만 동작한다.

     

    function delay(ms){
      return new Promise((resolve) => {
        setTimeout(resolve,ms);
      })
    }
    
    async function helloAsync(){
       await delay(3000);
       return "hello async";
    }
    
    async function main(){
      const res = await helloAsync();
      console.log(res); // await가 붙어서 바로 hello async 리턴
    }
    
    main();

    await는 promise에서 resolve한 값을 내놓기 때문에(async함수에서 return 한 값도 resolve한 값으로 간주한다) console.log(res)해도 정상적으로 출력된다.

     

    'Front-end > javascript' 카테고리의 다른 글

    [JavaScript] API 호출  (0) 2023.07.30
    [JavaScript] 콜백지옥과 promise  (0) 2023.07.25
    [JavaScript] 동기, 비동기  (1) 2023.07.18
    [JavaScript] spread 연산자  (0) 2023.07.17
    [JavaScript] 비 구조화 할당  (1) 2023.07.17