async & await

Tags

Promise의 문제점

프로미스도 중첩해서 쓰다보면 기존의 callback 지옥처럼 되는 경우가 있음.
이런 것 위에 async & await을 사용하면 동기식으로 순서대로 작성하는 것처럼 간편하게 작성할 수 있게 도와줌.
새로운 것이 추가된 것이 아니라, 기존에 존재하는 promise위에 조금 더 간편성을 더해서 좀 더 쉽게 쓸 수 있는 api를 제공한다. ( syntactic sugar )
notion image
 

무조건 async&await을 쓰면 되나?

ㄴㄴ 프로미스가 맞는 상황도 있으므로 적절히 사용.
 

프로미스 → async&await 구문 변환

기존의 프로미스 구문

notion image

async&await 구문 변환 결과

  • 함수 앞에 async라는 키워드만 붙이면, 함수 블럭 안의 내용이 자동으로 프로미스로 변환됨.
notion image

await 예시

  • aynsc로 감싸진 함수 내에서만 await 키워드 사용 가능
  • await 키워드를 쓰면 promise 코드가 끝날 때까지 기다려줌 (동기적으로 실행되는 것처럼 해줌)
notion image
 
notion image
 

동기처리 할 필요 없는 부분은?

  • 아래 코드에서는 getApple()과 getBanana() 함수가 연관성이 전혀 없다.
  • 즉 병렬로 처리해도 아무런 문제가 없는 함수인데 이렇게 짤 필요가 없음.
  • return 하기 전에만 제대로 양쪽 값을 가지고 있으면 됨.
  • 이런 경우에는 각각의 프로미스를 병렬처리하고 최종 값을 반환받는 promise.all
notion image
 

병렬처리 시킴 (2초 걸리던 거, 1초만에 해결됨)

notion image

promise.all

promise.all에 프로미스 배열을 전달하면, 프로미스가 다 반환되어진 뒤 그 결과를 다시 배열로 반환함.
notion image

promise.race

프로미스 배열로 보내면, 가장 먼저 반환받은 하나를 반환함.
notion image