갈푸라떼
갈푸라떼는 개발중
갈푸라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • CS (0)
      • CSinfo (0)
    • Frontend (15)
      • HTML,CSS (1)
      • Javascript (2)
      • React (0)
      • React Hook (12)
    • Backend (0)
      • Python (0)
      • Node.js (0)
      • php (0)
    • DB (2)
      • MySQL (2)
      • BigQuery (0)
      • Mongodb (0)
    • Study (186)
      • JavaScript (72)
      • JavaScript(Clean code) (50)
      • Node.js (11)
      • HTML,CSS (13)
      • React (30)
      • TypeScript (10)
      • React-Native (0)
    • Error (2)
      • error (2)
    • Git (22)
      • Git (22)
    • Help Coding (4)
      • Useful websites (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • Github

공지사항

인기 글

태그

  • SPREAD
  • 싱글스레드
  • 프로토타입
  • 네이밍
  • structure
  • 스코프 체인
  • Babel
  • 원시타입
  • 상속
  • PM2
  • 호이스팅
  • 인터프리터
  • 오버라이딩
  • 함수
  • 정적 레벨
  • 렉시컬 환경
  • 실행 컨텍스트
  • 심볼
  • symbol
  • this
  • 자바스크립트엔진
  • nodemon
  • function
  • 객체타입
  • class
  • 컴파일러
  • ECMAScript
  • 이터러블
  • Arrow
  • prototype

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갈푸라떼

갈푸라떼는 개발중

Study/JavaScript

[JavaScript_study] async/await

2022. 4. 13. 02:43

* async/await

  • async 와 await 는 절차적 언어에서 작성하는 코드와 같이 사용법도 간단하고 이해하기도 쉽다.
  • function 키워드 앞에 async만 붙여주면 되고
  • 함수 내부에서는비동기로 처리되는 부분 앞에 await만 붙여주면 된다.
  • async가 붙은 함수는 프로미스를 반환하고, 프로미스가 아닌 것은 프로미스로 감싸 반환한다.
  • await 키워드를 만나면 프로미스가 처리(settled)될 때까지 기다린다.

그리고 프라미스가 처리가 완료되어 resolve(값) 되면 값만 따로 추출해서 리턴한다.

await는 promise.then보다 좀 더 세련되게 프라미스의 result 값을 얻을 수 있도록 해주는 문법이다.

promise.then보다 가독성 좋고 쓰기도 쉽다.

 

그냥 값을 return해도 async가 붙여져 있기 때문에 해당 return값을 resolve하는 Promise가 만들어진다.

 

* async/await와 promise.then

async/await을 사용하면 await가 대기를 처리해주기 때문에 .then이 거의 필요하지 않습니다.

여기에 더하여 promise.catch 대신 일반 try..catch를 사용할 수 있다는 장점도 생깁니다.

항상 그러한 것은 아니지만, promise.then을 사용하는 것보다 async/await를 사용하는 것이 대개는 더 편리합니다.

​

그런데 문법 제약 때문에 async함수 바깥의 최상위 레벨 코드에선 await를 사용할 수 없습니다.

그렇기 때문에 관행처럼 .then/catch를 추가해 최종 결과나 처리되지 못한 에러를 다룹니다.


* async/await 예시 코드

function getBanana() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve('🍌');
    }, 1000);
  });
}

function getApple() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve('🍎');
    }, 3000);
  });
}

function getOrange() {
  return Promise.reject(new Error('no orange'));
}

// Promise의 then을 이용한 방번
/**
function fetchFruits() {
  getBanana().then((banana) =>getApple().then((apple) => [banana, apple])).then(console.log);
}

fetchFruits() //
  .then((fruits) => console.log(fruits));
*/

// async, await를 이용한 방법
// 바나나과 사과를 같이 가지고 오기
// 함수앞에 async를 붙여주어 비동기적인 코드들을 동기적으로 작동하게 해준다.
// 함수 내부에서는 await를 이용해서 동기적으로 작성가능하다.
// await 키워드를 이용해서 기다렸다가 Promise값이 resolve가 되면 그 값을 변수에 할당해준다.
// 그냥 값을 return해도 async가 붙여져 있기 때문에 해당 return값을 resolve하는 Promise가 만들어진다.
async function fetchFruits() {
  const banana = await getBanana();
  const apple = await getApple();
  return [banana, apple];
}

fetchFruits() //
  .then((fruits) => console.log(fruits));

 

function fetchEgg(chicken) {
  return Promise.resolve(`${chicken} => 댤걀`);
}

function fryEgg(egg) {
  return Promise.resolve(`${egg} => 계란후라이`);
}

function getChicken() {
  // return Promise.reject(new Error('치킨을 가지고 올 수 없음!'));
  return Promise.resolve(`사육 => 닭`);
}

// promise then을 async로 변경(황현우)
async function makeChicken() {
  const fetch = await fetchEgg("닭")
  const fry = await fryEgg(fetch)
  return fry
}

makeChicken() //
  .then((chicken) => console.log(chicken));


// function안에 promise와 then, catch를 return해주면 function이름에 ...이 뜨고 cttl + . 을 클릭하면 자동으로 async로 변환해주는 작업을 수행할 수 있다.
// function make() {
//   return getChicken()
 
//   .then(chicken => {return fetchEgg(chicken)})
//   .then(egg => fryEgg(egg))
//   .then(friedEgg => console.log(friedEgg))
//   // 만약 getChicken과정에서 error이 발생한 경우
//   .catch(error => console.log(error.name))
// }

// 자동으로 async로 변경
async function make() {
  try {
    const chicken = await getChicken();
    const egg = await fetchEgg(chicken);
    const friedEgg = await fryEgg(egg);
    return console.log(friedEgg);
  } catch (error) {
    return console.log(error.name);
  }
}

make()

 

'Study > JavaScript' 카테고리의 다른 글

[JavaScript_study] fetch api  (0) 2022.04.13
[JavaScript_study] JSON: JavaScript Object Notation  (0) 2022.04.13
[JavaScript_study] Promise static method  (0) 2022.04.13
[JavaScript_study] 프로미스(Promise)  (0) 2022.04.13
[JavaScript_study] 자바스크립트의 작동 원리  (0) 2022.04.13
    'Study/JavaScript' 카테고리의 다른 글
    • [JavaScript_study] fetch api
    • [JavaScript_study] JSON: JavaScript Object Notation
    • [JavaScript_study] Promise static method
    • [JavaScript_study] 프로미스(Promise)
    갈푸라떼
    갈푸라떼

    티스토리툴바