관리 메뉴

FU11M00N

[ JavaScript ] JS async와 await 본문

Programming/Javascript

[ JavaScript ] JS async와 await

호IT 2021. 3. 6. 21:33



 

- asyncd와 await

async와 await는 기존의 비동기 처리 방식인 콜백 함수와 프로미스의 단점을 보완하기 위해 나온 문법입니다.

 

- async와 await 사용하기

async function 함수명() {
  await 비동기처리 메서드();
}

함수 앞에 async 예약어를 붙이고 비동기 처리를 해야 하는 코드를 await앞에 붙이면 됩니다.

 

async function findAndSaveUsers(Users){
    //생략
}
findAndSaveUsers().then(()=> { /*생략*/ });

// 혹은 

async function other(){
    const result = await findAndSaveUsers();
}

하지만 비동기 처리 메서드가 프로미스 객체를 반환하지 않는다면 await가 의도한 대로 동작 안 하기 때문에

Async 함수는 항상 promise를 반환해야 합니다.

 

function fun1() {
    return new Promise(function(resolve, reject) {
      let num = 10;
      resolve(items)
      
    });
  }

  async function fun2() {
    var result = await fetchItems();
    console.log(result); // 10
  }

위의 예시에서 fun1() 함수는 프로미스 객체를 반환해주는 함수입니다.

fun1() 함수가 실행되면 프로미스가 Resolved로 이행되며 결과 값은 num변수가 됩니다.

 

fun2() 함수를 실행하면 fun1() 함수의 결괏 값인 num 변수가 result 변수에 담기면서 console.log(result); 의 출력 값은 10이 됩니다.

 

여기서 await를 사용하지 않으면 전 포스팅에서 배웠던. then()을 사용하거나 콜백 함수를 사용했어야 합니다.

하지만 async와 await 문법을 사용하게 되면 쉽고 간결한 코드를 짤 수 있을 것입니다.

 

 

 

- async & await 예외처리 하기

 

프로미스에서는 에러 처리를 위해. catch()를 사용했었습니다.

 

 

async function fun1(Users){
    try{
        let user = await Users.findOne({});
        user.name = 'fu11_m00n';
        user = await user.save();
        user = await Users.findOne({gender : 'm'});
    }
    catch(error){
        console.error(error);
    }
}

async에서는 try catch 문법을 사용하여 예외처리를 할 수 있습니다.

위와 같이 코드를 실행하다가 통신 오류가 생기거나 다양한 오류가 생겼을 때 catch문으로 잡아내어 에러를 처리할 수 있습니다.

 



ref 

Node.js 교과서: 기본기에 충실한 Node.js 10 입문서.
joshua1988.github.io/web-development/javascript/js-async-await/

'Programming > Javascript' 카테고리의 다른 글

동기 비동기  (2) 2022.12.14
[ JavaScript ] JS Promise  (0) 2021.03.06
[ Node.js ] Node의 특징  (0) 2021.03.04
[ Node.js ] Node란  (0) 2021.03.04
[ ES6 Script ] JS 기본 매개변수  (0) 2021.02.16
Comments